mainloop: Don't create poll until we need to

This slightly optimizes the case where we speculatively create a
Mainloop we might not use.
This commit is contained in:
Colin Walters 2012-03-06 08:10:33 -05:00
parent da00891688
commit e4849ebd2b
1 changed files with 7 additions and 1 deletions

View File

@ -25,7 +25,7 @@ class Mainloop(object):
DEFAULT = None
def __init__(self):
self._running = True
self.poll = select.poll()
self.poll = None
self._timeouts = []
self._pid_watches = {}
self._fd_callbacks = {}
@ -38,7 +38,12 @@ class Mainloop(object):
return cls.DEFAULT
raise NotImplementedError("Unknown context %r" % (context, ))
def _ensure_poll(self):
if self.poll is None:
self.poll = select.poll()
def watch_fd(self, fd, callback):
self._ensure_poll()
self.poll.register(fd)
self._fd_callbacks[fd] = callback
@ -63,6 +68,7 @@ class Mainloop(object):
if (min_timeout is None) or (ms < min_timeout):
min_timeout = ms
origtime = time.time() * 1000
self._ensure_poll()
fds = self.poll.poll(min_timeout)
for fd in fds:
self._fd_callbacks[fd]()