我的程序似乎不会超出Pool(5)语句的范围。我在windows服务器上使用python 3.6,64位虚拟机,有8个虚拟CPU。
代码如下
import pathos.multiprocessing as mp
poolObj = mp.Pool(5)
docs = poolObj.map(nlp,textStr)它在语句池(5)挂起。我也尝试了ProcessingPool(5),同样的结果。
发布于 2018-06-20 11:21:04
我是pathos的作者。首先..。如果您发布了一个代码片段,试图回答您的问题的人可以执行该代码片段,这将有所帮助。这可以帮助您获得更好的答案,因为可以更好地诊断它(在本例中,它可能是序列化问题,或者可能是freeze_support窗口问题,或者可能是构建问题)。
以下是我对了解更多细节的抽象建议:
pathos打算使用的multiprocess。它是一个具有更多功能的multiprocessing分支。如果答案是否定的,那么你需要安装一个,然后重新构建multiprocess.__main__中运行如果你使用的是multiprocess (见上),然而,在windows上,你将需要使用pathos.helpers.freeze_support。在大多数情况下,windows上的池都需要它。dill.check (在dill包中)来确认该对象是否能够正确地为multiprocess进行pickle。它也可能是以上一个或多个的组合。
发布于 2022-01-18 15:50:14
可能的解释
我遇到了类似的问题,我花了很长时间才明白发生了什么,我最终发现其中一个进程被OOM杀手杀死了,因为它使用了太多的内存。
Pathos无法检测到这一点,正在等待进程完成,尽管它已被终止(并创建了一个新的空闲进程)。
在Ubuntu上,您可以查看内核消息,以确定OOM杀手是否已被触发:
dmesg -T找一行提到某事的行,比如:
Mon Jan 10 02:24:40 2022 Out memory:已杀死进程1420 (python)总计-vm:14764496kB,anon-rss:13565716kB,file-rss:28kB,shmem-rss:0kB,UID:1000 pgtables:27652kB oom_score_adj:0
重现问题
如果您想自己尝试,可以使用以下代码片段重现相同的行为:
import time
from pathos.multiprocessing import ProcessPool
def do_something(i):
print(i, 'entering')
time.sleep(2)
print(i, 'returning')
return i
with ProcessPool(2) as pool:
results = pool.map(
do_something,
range(5)
)在执行过程中,您可以使用htop杀死其中一个子进程(我的屏幕截图的最后两行)。如果这样做,您将最终处于挂起状态:不使用CPU,但Python脚本永远不会返回。

https://stackoverflow.com/questions/50921350
复制相似问题