Python多处理,在一个循环中多次使用池,在第一次迭代后会卡住

2024-10-03 06:31:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下情况,我在for循环中创建一个池,如下所示(我知道这不是很优雅,但我必须这样做,因为酸洗的原因)。假设pathos.multiprocessing等同于python的multiprocessing库(因为它是由一些与此问题无关的细节决定的)。 我要执行以下代码:

self.pool = pathos.multiprocessing.ProcessingPool(number_processes)


for i in range(5):


    all_responses = self.pool.map(wrapper_singlerun, range(self.no_of_restarts))

    pool._clear()

现在我的问题是:循环成功地运行了第一个迭代。但是,在第二次迭代时,算法突然停止(没有完成pool.map操作。我怀疑僵尸进程是生成的,或者该进程不知何故是switched。下面你将找到我迄今为止所做的一切。在

^{pr2}$

上面的代码在我的mac上运行得非常好。但是,当我把它上传到具有以下规格的集群上时,我得到的错误是它在第一次迭代后卡住了:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04 LTS"

这是the link to the pathos'多处理库文件是


Tags: the代码selfmapfor进程ubuntu情况
1条回答
网友
1楼 · 发布于 2024-10-03 06:31:55

我假设你试图通过某个函数调用这个函数,这不是正确的使用方法。在

你需要把它包起来:

if __name__ == '__main__':
    for i in range(5):

         pool = pathos.multiprocessing.Pool(number_processes)

         all_responses = pool.map(wrapper_singlerun, 

range(self.no_of_restarts))

如果你不这样做,它会继续创建自己的副本,并开始将其放入堆栈中,最终将填充堆栈并阻止所有内容。它在mac上运行的原因是它有fork而windows没有。在

相关问题 更多 >