| 85 | self.start() |
| 86 | |
| 87 | def run(self): |
| 88 | while self._running: |
| 89 | try: |
| 90 | task, args, kwargs = self.queue.get(block=True, timeout=.5) |
| 91 | self.continue_event.clear() |
| 92 | self.received_task_event.clear() |
| 93 | self.done_event.clear() |
| 94 | self.exception_event.clear() |
| 95 | logger.debug("Received task") |
| 96 | self.received_task_event.set() |
| 97 | |
| 98 | task(*args, **kwargs) |
| 99 | logger.debug("Task complete") |
| 100 | self.done_event.set() |
| 101 | except Queue.Empty: |
| 102 | pass |
| 103 | except Exception as e: |
| 104 | logger.debug(type(e).__name__ + " occurred, args=" + str(e.args) + "\n" + traceback.format_exc()) |
| 105 | self.exception_info = e |
| 106 | self.exception_event.set() |
| 107 | if self.exception_callback: |
| 108 | self.exception_callback(self, self.exception_info) |
| 109 | self.continue_event.wait() |
| 110 | |
| 111 | def put(self, task, *args, **kwargs): |
| 112 | self.queue.put((task, args, kwargs)) |