reuse the code

This commit is contained in:
benoitc 2014-05-15 08:03:06 +02:00
parent 14f71ebf39
commit 81810d9f04

View File

@ -44,7 +44,11 @@ class PollerBase(object):
return: (fd, mode) return: (fd, mode)
""" """
raise NotImplementedError self._wait(nsec)
if self.events:
return self.events.pop(0)
return None
def wait(self, nsec): def wait(self, nsec):
""" return all events raised in the pollster when calling the """ return all events raised in the pollster when calling the
@ -52,7 +56,9 @@ class PollerBase(object):
return: [(fd, mode), ....] return: [(fd, mode), ....]
""" """
raise NotImplementedError events = self._wait(nsec)
self.events = []
return events
def close(self): def close(self):
""" close the pollster """ """ close the pollster """
@ -109,24 +115,13 @@ class SelectPoller(PollerBase):
self.events.extend(events) self.events.extend(events)
return self.events return self.events
def waitfd(self, nsec):
self._wait(nsec)
if self.events:
return self.events.pop(0)
return None
def wait(self, nsec):
events = self._wait(nsec)
self.events = []
return events
def close(self): def close(self):
self.read_fds = [] self.read_fds = []
self.write_fds = [] self.write_fds = []
if hasattr(select, 'kqueue'): if hasattr(select, 'kqueue'):
class KQueuePoller(object): class KQueuePoller(PollerBase):
def __init__(self): def __init__(self):
self.kq = select.kqueue() self.kq = select.kqueue()
@ -194,22 +189,11 @@ if hasattr(select, 'kqueue'):
# return all events # return all events
return self.events return self.events
def waitfd(self, nsec=0):
self._wait(nsec)
if self.events:
return self.events.pop(0)
return None
def wait(self, nsec=0):
events = self._wait(nsec)
self.events = []
return events
def close(self): def close(self):
self.kq.close() self.kq.close()
if hasattr(select, "epoll"): if hasattr(select, "epoll"):
class EpollPoller(object): class EpollPoller(PollerBase):
def __init__(self): def __init__(self):
self.poll = select.epoll() self.poll = select.epoll()
@ -324,22 +308,13 @@ if hasattr(select, "epoll"):
# return all events # return all events
return self.events return self.events
def waitfd(self, nsec=0):
self._wait(nsec)
return self.events.pop(0)
def wait(self, nsec=0):
events = self._wait(nsec)
self.events = []
return events
def close(self): def close(self):
self.poll.close() self.poll.close()
if hasattr(select, "poll") or hasattr(select, "devpoll"): if hasattr(select, "poll") or hasattr(select, "devpoll"):
class _PollerBase(object): class _PollerBase(PollerBase):
POLL_IMPL = None POLL_IMPL = None
@ -446,17 +421,6 @@ if hasattr(select, "poll") or hasattr(select, "devpoll"):
self.events.extend(all_events) self.events.extend(all_events)
return self.events return self.events
def waitfd(self, nsec=0):
self._wait(nsec)
if self.events:
return self.events.pop(0)
return None
def wait(self, nsec=0):
events = self._wait(nsec)
self.events = []
return events
def close(self): def close(self):
for fd in self.fds: for fd in self.fds:
self.poll.unregister(fd) self.poll.unregister(fd)