啊,我现在知道问题所在了。
from Queue import Queue
和
from multiprocessing import Queue
不是同一个队列。多处理 (mp)queue
中有一些特殊代码,允许它在进程之间来回传递值。这是 python GIL 和线程障碍的结果。
正在发生的事情是,队列不允许它所在的进程死亡,直到它为空。特别注意第二个红色突出显示的警告。循环正常完成,队列不允许您的 python 进程终止,因为队列不在共享内存中,就像您对线程所期望的那样。我并不完全熟悉 mp.Queue 背后的过程,但它涉及在put
和get
进程之间腌制队列中的项目。因此,异常消除一个进程可能会导致死锁。
因此,您需要使用 完全卸载队列queue.get()
,并且您的进程将按预期终止。
此代码将按您的预期终止:
from multiprocessing import Process,Queue
if __name__ == "__main__":
tobeQueue = Queue()
for i in range(1,10000):
tobeQueue.put(i)
for i in range(1,10000):
tobeQueue.get() #remove all 9999 items, allow it to die.