【发布时间】:2017-10-24 03:15:40
【问题描述】:
注1: 我想在多进程中使用 mutiprocessing.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()
但是,我认为 sleep 对于生产代码来说不是一种稳定的方法,所以我尝试使用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()
【问题讨论】:
-
你想做什么?在一个进程中使用 multiprocessing.Queue?
-
请查看我编辑的问题。简而言之,我想将它与多进程一起使用,但是当我提出这个问题时,我选择用最少的代码简化问题。
-
你几乎不会在多进程中遇到这个问题。因为您将拥有一个可以阻塞主进程的消费者进程。
-
是的,我用多进程试试,效果很好。但我仍然很好奇为什么这会发生在单个进程中。这个问题的来源(我项目中的代码)有问题,即使是多处理,我也会尝试给出另一个简化的代码。
标签: python multithreading