Python:Multiprocessing Queue.put不适用于半大数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python:Multiprocessing Queue.put不适用于半大数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1116字,纯文字阅读大概需要2分钟。
内容图文
![Python:Multiprocessing Queue.put不适用于半大数据](/upload/InfoBanner/zyjiaocheng/678/714ed27b367b4416a53d030e7e717c8c.jpg)
我正在测试模块多处理中Queue结构的功能.我看不到为什么这段简单的代码无法为几乎不大的数据集终止
码:
from multiprocessing import Process,Queue
if __name__ == "__main__":
tobeQueue = Queue()
for i in range(1,10000):
tobeQueue.put(i)
此代码应该终止,适用于小于等于3的10的范围…但不适用于大于10的3的范围…
解决方法:
啊,我现在知道了问题所在.
from Queue import Queue
和
from multiprocessing import Queue
不在同一队列中.多处理(mp)队列中包含一些特殊的代码,以允许它在进程之间来回传递值.这是python GIL和线程障碍的结果.
What is happening, is the queue will not allow the process it is in to die until it is empty.请特别注意第二个红色突出显示的警告.循环正常结束,队列不允许终止python进程,因为队列不在共享内存中,就像您期望的那样.我对mp.Queue背后的过程并不完全熟悉,但是它涉及在放置和获取过程之间腌制队列中的项目.因此,异常地消除一个过程可能会导致死锁.
因此,您需要使用queue.get()完全卸载队列,然后进程将按预期终止.
该代码将按照您的预期终止:
from multiprocessing import Process,Queue
if __name__ == "__main__":
tobeQueue = Queue()
for i in range(1,10000):
tobeQueue.put(i)
for i in range(1,10000):
tobeQueue.get() #remove all 9999 items, allow it to die.
内容总结
以上是互联网集市为您收集整理的Python:Multiprocessing Queue.put不适用于半大数据全部内容,希望文章能够帮你解决Python:Multiprocessing Queue.put不适用于半大数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。