啊,我现在知道了问题所在.
from Queue import Queue
和
from multiprocessing import Queue
不在同一队列中.多处理(mp)队列中包含一些特殊的代码,以允许它在进程之间来回传递值.这是python GIL和线程障碍的结果.
What is happening, is the queue will not allow the process it is in to die until it is empty.请特别注意第二个红色突出显示的警告.循环正常结束,队列不允许终止python进程,因为队列不在共享内存中,就像您期望的那样.我对mp.Queue背后的过程并不完全熟悉,但是它涉及在放置和获取过程之间腌制队列中的项目.因此,异常地消除一个过程可能会导致死锁.
因此,您需要使用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.