On Wed, Jun 04, 2003 at 01:33:00PM -0400, Graham Fawcett wrote:
> Using Quixote on Medusa to serve up static files, I was getting really
> terrible performance when the file sizes started to increase. CPU would
> shoot through the roof on the server, and througput downgraded very quickly.
>
> I've got a patch that seems to solve the problem... for me, anyway. Instead
> of pushing the content of the response to Medusa as a string, I push a
> Medusan file_producer, wrapped around the already-built StringIO,
> output_file.
I'd like to see a more general fix. Instead of the publisher always
calling str() on the response it should be possible to return a
"streamed response". Something like:
# in http_response.py
class ResponseStream:
def __iter__(self):
...
and then in publisher.py publish():
if output:
response.response.set_body(output)
request.response.write(stdout)
finally in http_response.py:
def write(self, file):
...
if isinstance(self.body, ResponseStream):
for chunk in self.body:
file.write(chunk)
else:
stdout.write(str(self.body))
There are a obviously a few details to resolve but I think it would be a
feasible solution. Does someone want to try to make a patch?
Neil