注1:
我想在多个进程中使用multiprocessing.Queue,但在单进程情况下发现了此问题。因此,以下代码使用单个进程简化问题。
类似的问题如下:Broken pipe error with multiprocessing.Queue。
该帖子中的答案证明了这个问题是由于主线程在队列线程完成工作之前退出了导致的。他解决这个问题的方法是在代码中添加
类似的问题如下:Broken pipe error with multiprocessing.Queue。
该帖子中的答案证明了这个问题是由于主线程在队列线程完成工作之前退出了导致的。他解决这个问题的方法是在代码中添加
sleep(0.1)
:import multiprocessing
import time
def main():
q = multiprocessing.Queue()
for i in range(10):
print i
q.put(i)
time.sleep(0.1) # Just enough to let the Queue finish
if __name__ == "__main__":
main()
不过,我认为睡眠并不是一种稳定的生产代码方法,因此我尝试使用 join
来实现。您可以查看下面的代码,但不幸的是,它无法正常工作。有人知道如何在没有睡眠的情况下完成这个吗?
import multiprocessing
import time
def main():
q = multiprocessing.Queue()
for i in range(10):
q.put(i)
# time.sleep(4)
q.close()
q.join_thread()
if __name__ == "__main__":
main()