Patch to use poll() support in Python 2.0

A.M. Kuchling akuchlin@m...
Wed, 20 Dec 2000 22:40:06 -0500


This patch adds the ability to use the poll() support that was added
to the select module in Python 2.0. Only lightly tested ... please
proofread this patch carefully.

--amk

--- /tmp/asyncore.py	Thu May 4 02:06:04 2000
+++ asyncore.py	Wed Dec 20 22:38:38 2000
@@ -93,6 +93,7 @@
pass

def poll2 (timeout=0.0, map=None):
+ # Use Andy Dustman's poll module
import poll
if map is None:
map=socket_map
@@ -124,9 +125,45 @@
except KeyError:
pass

+def poll3 (timeout=0.0, map=None):
+ # Use the poll() support added to the select module in Python 2.0
+ if map is None:
+ map=socket_map
+ # timeout is in milliseconds
+ timeout = int(timeout*1000)
+ pollster = select.poll()
+ if map:
+ l = []
+ for fd, obj in map.items():
+ flags = 0
+ if obj.readable():
+ flags = select.POLLIN
+ if obj.writable():
+ flags = flags | select.POLLOUT
+ if flags:
+ pollster.register(fd, flags)
+ r = pollster.poll (timeout)
+ for fd, flags in r:
+ try:
+ obj = map[fd]
+ try:
+ if (flags & select.POLLIN):
+ obj.handle_read_event()
+ if (flags & select.POLLOUT):
+ obj.handle_write_event()
+ except ExitNow:
+ raise ExitNow
+ except:
+ obj.handle_error()
+ except KeyError:
+ pass
+
def loop (timeout=30.0, use_poll=0, map=None):

if use_poll:
+ if hasattr(select, 'poll'):
+ poll_fun = poll3
+ else:
poll_fun = poll2
else:
poll_fun = poll