本站消息

站长简介/公众号


站长简介:逗比程序员,理工宅男,前每日优鲜python全栈开发工程师,利用周末时间开发出本站,欢迎关注我的微信公众号:幽默盒子,一个专注于搞笑,分享快乐的公众号

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Python multiprocessing.Manager().Queue():尝试加入进程时出现死锁

发布于2021-09-11 15:12     阅读(1047)     评论(0)     点赞(22)     收藏(4)



我正在实现一个多处理的网络爬虫。我使用 Manager().Queue() 创建了一个爬虫将下载的文件名队列。所有进程共享同一个队列,并且它们也在队列上执行 put() 和 get() 操作。当我读到 Queue() 类时,它是线程安全的,可以使我的队列成为阻塞队列,这解决了进程试图从空队列中获取 () 项目的问题。然而,另一个问题出现了:当队列最后只有几个项目时,某个进程,比如进程 1,检测到它是非空的,然后所有这些项目都被另一个进程,比如进程 2 弹出,然后进程 1 试图get() 队列中的一个项目,但发现它是空的,因此它的 get() 调用将永远阻塞。

尝试的解决方案:允许 get() 超时,因此当发生超时时,get() 将引发“队列为空”异常,并在此之后使进程退出

但似乎这个解决方案行不通,因为有时程序会卡在 process.join() 阶段。

有人可以帮我吗?我的英语不是很好,但如果你能考虑这个问题,我真的很感激。谢谢你。


解决方案


暂无回答






所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1037293/3fb1eb29235d4bfb1e84/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

22 0
收藏该文
已收藏

评论内容:(最多支持255个字符)