X-Git-Url: https://git.llucax.com/software/pymin.git/blobdiff_plain/026f5f3a6274709b7863c619c979dd32f0ee686f..2caea9b817885fc1dcb6b1feaf7a06a8a6f54aac:/eventloop.py diff --git a/eventloop.py b/eventloop.py index 7da492d..acc370a 100644 --- a/eventloop.py +++ b/eventloop.py @@ -6,10 +6,19 @@ A simple event loop. Please see EventLoop class documentation for more info. """ -from select import poll, POLLIN, POLLPRI, POLLERR +import select +from select import POLLIN, POLLPRI, POLLERR __ALL__ = ('EventLoop') +class LoopInterruptedError(RuntimeError): + def __init__(self, select_error): + self.select_error = select_error + def __repr__(self): + return 'LoopInterruptedError(select_error=%r)' % self.select_error + def __str__(self): + return 'Loop interrupted: %s' % self.select_error + class EventLoop: r"""EventLoop(file[, handler]) -> EventLoop instance @@ -53,7 +62,7 @@ class EventLoop: See EventLoop class documentation for more info. """ - self.poll = poll() + self.poll = select.poll() self._stop = False self.__register(file) self.handler = handler @@ -101,7 +110,10 @@ class EventLoop: then only 1 event is processed and then this method returns. """ while True: - res = self.poll.poll() + try: + res = self.poll.poll() + except select.error, e: + raise LoopInterruptedError(e) if self.handler is not None: self.handler(self) else: