def __event_loop(self):
def dispatch_event(event):
for listener in self.__event_listeners:
try:
listener(event)
except Exception as e:
self._logger.exception("Event processing")
def get_delayed_events():
"""
:return: As many delayed events as are due to be executed, empty array if none.
"""
events = []
with self.__delayed_event_lock:
while len(self.__delayed_events) and heapq.nsmallest(1, self.__delayed_events)[0][0] <= time.time():
events.append(heapq.heappop(self.__delayed_events))
for ev in events:
ev[1].time = time.time()
self._logger.debug("Firing for t=%f (%d ms late)" % (ev[0], int((time.time() - ev[0]) * 1000)))
return list([x[1] for x in events])
# Here begins the body of __event_loop
while not self.stop or not self.__event_queue.empty():
try:
for e in get_delayed_events():
dispatch_event(e)
dispatch_event(self.__event_queue.get(block=True, timeout=0.05))
self.__event_queue.task_done()
except queue.Empty:
pass
self.__event_queue = None
评论列表
文章目录