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 committed 2012-03-06 11:59:06 -05:00
1 parent da00891688
commit e4849ebd2b
1 file changed
+7 -1
+7 -1
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]()