python – 多处理错误管道错误.Queue

python – 多处理错误管道错误.Queue,第1张

概述在 python2.7中,multiprocessing.Queue在从函数内部初始化时抛出一个破坏的错误.我提供了一个重现问题的最小例子. #!/usr/bin/python# -*- coding: utf-8 -*-import multiprocessingdef main(): q = multiprocessing.Queue() for i in range 在 python2.7中,multiprocessing.Queue在从函数内部初始化时抛出一个破坏的错误.我提供了一个重现问题的最小例子.

#!/usr/bin/python# -*- Coding: utf-8 -*-import multiprocessingdef main():    q = multiprocessing.Queue()    for i in range(10):        q.put(i)if __name__ == "__main__":    main()

抛出下面破裂的管道错误

Traceback (most recent call last):file "/usr/lib64/python2.7/multiprocessing/queues.py",line 268,in _Feedsend(obj)IOError: [Errno 32] broken pipeProcess finished with exit code 0

我无法破译原因.我们无法从函数内部填充Queue对象,这当然很奇怪.

解决方法 这里发生的是当你调用main()时,它会创建Queue,在其中放入10个对象并结束函数,垃圾收集其所有内部变量和对象,包括Queue.
但是你得到这个错误是因为你仍在尝试发送队列中的最后一个号码.

来自文档documentation:

“When a process first puts an item on the queue a Feeder thread is
started which transfers objects from a buffer into the pipe.”

由于put()是在另一个Thread中创建的,因此它不会阻止脚本的执行,并允许在完成Queue *** 作之前结束main()函数.

试试这个 :

#!/usr/bin/python# -*- Coding: utf-8 -*-import multiprocessingimport timedef main():    q = multiprocessing.Queue()    for i in range(10):        print i        q.put(i)    time.sleep(0.1) # Just enough to let the Queue finishif __name__ == "__main__":    main()

应该有一种方法来加入队列或阻止执行,直到将对象放入队列,你应该看看文档.

总结

以上是内存溢出为你收集整理的python – 多处理错误管道错误.Queue全部内容,希望文章能够帮你解决python – 多处理错误管道错误.Queue所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1194256.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存