我正在编写一个具有事件处理循环的库中的类:
class EventSystem(object):
def __init__(self):
self.queue = Queue.Queue()
self.thread = threading.Thread(target=self_process_loop)
self.thread.daemon = True
self.thread.start()
def _process_loop(self):
while True:
event = self.queue.get()
self._handle_event(event)
def _handle_event(self, event):
...
我已将线程设置为线程,daemon
因此它与主程序一起退出,但这意味着它可能会在处理过程中被杀死。我真的很想在它被杀死之前等待当前的处理迭代完成。
通常在这些情况下,在 while 循环中会检查一个标志,并且有一些方法 -stop()
比如说 - 设置它False
。如果可能的话,我宁愿避免这个要求。
以下被认为是坏的吗?
def _process_loop(self):
while True:
event = self.queue.get()
self.thread.daemon = False
self._handle_event(event)
self.thread.daemon = True
编辑:是的,这很糟糕:RuntimeError: cannot set daemon status of active thread
实现这一目标的正确方法是什么?