From bb849583c0c6dfcbd98d302ce1f4328d7c869aea Mon Sep 17 00:00:00 2001 From: Ryan Williams Date: Mon, 19 Apr 2010 23:53:07 -0700 Subject: [PATCH] Added do_poll method to poll hubs so that the APis get handed the appropriate flavor of timeout. Thanks to redbo for tracking this down. --- eventlet/hubs/epolls.py | 4 +++- eventlet/hubs/poll.py | 8 +++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/eventlet/hubs/epolls.py b/eventlet/hubs/epolls.py index 1402425..2eb341e 100644 --- a/eventlet/hubs/epolls.py +++ b/eventlet/hubs/epolls.py @@ -31,7 +31,6 @@ from eventlet.hubs.poll import READ, WRITE # are identical in value to the poll constants class Hub(poll.Hub): - WAIT_MULTIPLIER = 1.0 # epoll.poll's timeout is measured in seconds def __init__(self, clock=time.time): BaseHub.__init__(self, clock) self.poll = epoll() @@ -51,3 +50,6 @@ class Hub(poll.Hub): else: self.register(fileno, new=False) return listener + + def do_poll(self, seconds): + return self.poll.poll(seconds) diff --git a/eventlet/hubs/poll.py b/eventlet/hubs/poll.py index 0d5be7b..890ff50 100644 --- a/eventlet/hubs/poll.py +++ b/eventlet/hubs/poll.py @@ -13,8 +13,6 @@ READ_MASK = select.POLLIN | select.POLLPRI WRITE_MASK = select.POLLOUT class Hub(BaseHub): - WAIT_MULTIPLIER=1000.0 # poll.poll's timeout is measured in milliseconds - def __init__(self, clock=time.time): super(Hub, self).__init__(clock) self.poll = select.poll() @@ -64,6 +62,10 @@ class Hub(BaseHub): # already removed/invalid pass + def do_poll(self, seconds): + # poll.poll expects integral milliseconds + return self.poll.poll(int(seconds * 1000.0)) + def wait(self, seconds=None): readers = self.listeners[READ] writers = self.listeners[WRITE] @@ -73,7 +75,7 @@ class Hub(BaseHub): sleep(seconds) return try: - presult = self.poll.poll(int(seconds * self.WAIT_MULTIPLIER)) + presult = self.do_poll(seconds) except select.error, e: if get_errno(e) == errno.EINTR: return