在Python Queue documentation中,有以下示例:
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
q = Queue()
for i in range(num_worker_threads):
t = Thread(target=worker)
t.daemon = True
t.start()
for item in source():
q.put(item)
q.join() # block until all tasks are done
我只是想知道这是否是正确的方法,因为似乎工作线程永远不会终止。我想他们最终会成为僵尸。这是Python文档忽略的问题吗?感谢。
答案 0 :(得分:1)
这取决于你的线程究竟在做什么,以及是否应允许它们在完成其中一项工作时被终止。
由于您正在使用while True
,因此当您的父级结束时,应该杀死子线程。 (更多信息start the server)
另一方面,如果你想做一些清理工作,你可能不应该使用while not parent_said_stop
而是使用daemon = True
,删除PDO::FETCH_GROUP
。然后,根据您如何停止父级(无论是通过某些键击,中断还是其他任何不通过),您可以捕获父级正在停止并将消息发送给子级的事实。 (可以看到流程结束时的工作方式in the docs here)