栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

python multiprocessing .join()死锁取决于辅助函数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python multiprocessing .join()死锁取决于辅助函数

文档警告此:

警告:如上所述,如果子进程已将项目放入队列中(并且未使用JoinableQueue.cancel_join_thread),则该进程将不会终止,直到所有缓冲的项目都已刷新到管道中为止。

这意味着,如果您尝试加入该进程,则可能会陷入僵局,除非您确定已放入队列中的所有项目都已消耗完。同样,如果子进程是非守护进程,则当父进程尝试加入其所有非守护进程子进程时,其父进程可能会在退出时挂起。

尽管a

Queue
似乎是不受限制的,但在后台隐藏的情况下,已排队的项目在内存中进行了缓冲,以避免进程间管道过载。在刷新这些内存缓冲区之前,进程无法正常结束。你
worker1()
放多了很多项目

排队比你的
worker2()
,而这一切就是这么简单。注意,在实现诉诸于内存缓冲之前可以排队的项目数量未定义:它在OS和Python版本之间可能会有所不同。

正如文档所建议的那样,避免这种情况的正常方法是 尝试处理 之前

.get()
所有项目 队列中 移出 。正如您所发现的,是否有
要这样做取决于未定义的方式,取决于每个工作进程将多少个项目放入队列中。
.join()



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/623770.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号