Python:正确终止工作线程

时间:2016-01-23 00:41:55

标签: python multithreading

在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文档忽略的问题吗?感谢。

1 个答案:

答案 0 :(得分:1)

这取决于你的线程究竟在做什么,以及是否应允许它们在完成其中一项工作时被终止。

由于您正在使用while True,因此当您的父级结束时,应该杀死子线程。 (更多信息start the server

另一方面,如果你想做一些清理工作,你可能不应该使用while not parent_said_stop而是使用daemon = True,删除PDO::FETCH_GROUP。然后,根据您如何停止父级(无论是通过某些键击,中断还是其他任何不通过),您可以捕获父级正在停止并将消息发送给子级的事实。 (可以看到流程结束时的工作方式in the docs here