您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

文档警告此:

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

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

尽管aQueue似乎是不受限制的,但在后台隐藏的情况下,已排队的项目在内存中进行了缓冲,以避免进程间管道过载。在刷新这些内存缓冲区之前,进程无法正常结束。你worker1()放多了很多项目 排队比你的worker2(),而这一切就是这么简单。注意,在实现诉诸于内存缓冲之前可以排队的项目数量未定义:它在OS和Python版本之间可能会有所不同。

正如文档所建议的那样,避免这种情况的正常方法 尝试处理 之前.get()所有项目 队列中 移出 。正如您所发现的,是否有 要这样做取决于未定义的方式,取决于每个工作进程将多少个项目放入队列中。

python 2022/1/1 18:34:38 有210人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶