python - Python multiprocessing.Manager().Queue():尝试加入进程时出现死锁
问题描述
我正在实现一个多处理的网络爬虫。我使用 Manager().Queue() 创建了一个爬虫将下载的文件名队列。所有进程共享同一个队列,并且它们也在队列上执行 put() 和 get() 操作。当我读到 Queue() 类时,它是线程安全的,可以使我的队列成为阻塞队列,这解决了进程试图从空队列中获取 () 项目的问题。但是,另一个问题出现了:当队列最终只有少数项目时,某个进程,比如进程 1,检测到它是非空的,然后所有这些项目都被另一个进程,比如进程 2 弹出,然后进程 1 尝试get() 队列中的一个项目,但发现它是空的,因此它的 get() 调用将永远阻塞。
尝试的解决方案:允许 get() 超时,所以当超时发生时,get() 将引发“队列空”异常,然后让进程退出
但似乎这个解决方案行不通,因为有时程序会卡在 process.join() 阶段。
有人可以帮我吗?我的英语不是那么好,但如果你能考虑一下这个问题,我将不胜感激。谢谢你。
解决方案
推荐阅读
- android - 为什么这个问题发生在firebase依赖中?
- python - 如何聚合文本文件的出现然后绘制它Python
- python - Scikit 中的内核技巧和内核 K-Means
- openapi-generator - 从 openapi 从 C# 生成时在 DataMember 中生成不同的名称
- php - 'require' 绝对路径不起作用(作曲家)
- json - 在使用 DRF python 为 API 创建 JSON 响应时面临挑战
- ios - 无法使用 SharedSecret 建立 VPN 连接
- c# - Fluent Assertions:两个数组列表的等价性,数组需要严格排序
- sql - Postgresql COPY 命令将数据导出到 csv:我们可以为 csv 中的字符串实现双引号吗?
- javafx - 如何让 JavaFX TextFlow 自动剪切长文本?