
#!/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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)