[Python-Dev] Fw: SocketServer and makefile() [from comp.lang.python]
Greg Stein
gstein@lyra.org
Thu, 31 Aug 2000 13:04:18 -0700
On Thu, Aug 31, 2000 at 03:48:16PM -0500, Guido van Rossum wrote:
> I wrote:
>...
> > Solution? Don't use rfile for reading, but go for the socket itself. Or
> > revamp the two classes to forget about the socket once the files (wfile and
> > rfile) are created. The latter might not be possible, tho.
>
> I was about to say that you have it backwards, and that you should
> only use rfile & wfile, when I realized that CGIHTTPServer.py needs
> this! The subprocess needs to be able to read the rest of the socket,
> for POST requests. So you're right.
Ooh! I hadn't considered that case. Yes: you can't transfer the contents of
a FILE's buffer to the CGI, but you can pass a file descriptor (the socket).
> Solution? The buffer size should be an instance or class variable.
> Then SocketServer can set it to buffered by default, and CGIHTTPServer
> can set it to unbuffered.
Seems reasonable.
> > Dunno why the unbuffered reading would be slow. I'd think it would still
> > read large chunks at a time when you request it.
>
> System call overhead? I had the same complaint about Windows, where
> apparently winsock makes you pay more of a performance penalty than
> Unix does in the same case.
Shouldn't be. There should still be an rfile.read(1000) in that example app
(with the big transfers). That read() should be quite fast -- the buffering
should have almost no effect.
So... what is the underlying problem?
[ IOW, there are two issues: the sock vs file thing; and why rfile is so
darn slow; I have no insights on the latter. ]
Cheers,
-g
--
Greg Stein, http://www.lyra.org/