[英]Why is multiprocessing with Queue hanging?
我正在尝试在本指南的帮助下探索multiprocessing
模块的使用。
它建议运行此代码:
import multiprocessing as mp
def addPositive(queue):
print("I am in addPositive.")
for i in range(1, 100):
queue.put(i)
def addNegative(queue):
print("I am in addNegative.")
for i in range(-100, 0):
queue.put(i)
myQueue = mp.Queue()
process1 = mp.Process(target=addPositive, args=(myQueue,))
process2 = mp.Process(target=addNegative, args=(myQueue,))
process1.start()
process2.start()
process1.join()
process2.join()
while myQueue:
print(myQueue.get(), end=",")
myQueue.close()
运行此代码我得到一个Runtime
错误,我认为这是由于缺少if __name__ == "__main__":
块引起的。 我已将代码更新为:
import multiprocessing as mp
def addPositive(queue):
print("I am in addPositive.")
for i in range(1, 100):
queue.put(i)
def addNegative(queue):
print("I am in addNegative.")
for i in range(-100, 0):
queue.put(i)
def run():
myQueue = mp.Queue()
process1 = mp.Process(target=addPositive, args=(myQueue,))
process2 = mp.Process(target=addNegative, args=(myQueue,))
process1.start()
process2.start()
process1.join()
process2.join()
while myQueue:
print(myQueue.get(), end=",")
myQueue.close()
if __name__ == "__main__":
run()
当我运行它时,我从两个函数中获得了两个print
语句,但随后执行挂起并且什么也不做。
我期待的 output 应该看起来像:
1,2,3,4,5,6,7,8,9,10,-1001,11,12,13,-1000,-999,-998,-997,-996,-995,-994,-993,-992,-991,-990,-989,-988,-987,-986,-985,-984,-983,-982,-981,14,-980,15,-979,16,17,18,19,20,21,22,23,24,25,26,-978,-977,-976,-975,-974,-973,-972,-971,-970...
有人可以帮忙解决问题吗?
由于您的队列存在, while myQueue:
将永远运行并且永远不会退出。
正如 quamrana 建议的那样,通常在 while 循环中使用myQueue.qsize()
应该可以解决问题。 但正如文档所述,这在 macOS 上不存在。 所以尝试while not myQueue.empty():
代替。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.