High performance IO on non-blocking sockets
Jeremy Hylton
jeremy at zope.com
Fri Mar 14 11:36:37 EST 2003
On Fri, 2003-03-14 at 05:42, Troels Walsted Hansen wrote:
> I'm trying to do IO on non-blocking sockets (within the asyncore framework),
> and it seems to me that Python lacks a few primitives that would make this
> more efficient.
>
There's another source of inefficiency that has always bugged me about
the asyncore framework. There are many layers of Python code between
the send() method you call on an aysncore socket and the send() call in
C. A lot of these layers seem unnecessary.
There's a method on the socket like so:
def send(self, data):
try:
result = self.socket.send(data)
return result
except socket.error, why:
if why[0] == EWOULDBLOCK:
return 0
else:
raise socket.error, why
return 0
It seems like it would be much simpler to have a non-blocking socket
implemented in C that took a single argument and return a 2-tuple of
data and errno. The C implemenation could use METH_O instead of
METH_VARARGS, and the caller wouldn't need to use a try/except.
Jeremy
More information about the Python-list
mailing list