我有以下情况,我在 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
。下面你会发现我到目前为止所尝试的所有内容。
for i in range(5):
pool = pathos.multiprocessing.ProcessingPool(number_processes)
all_responses = self.pool.map(wrapper_singlerun, range(self.no_of_restarts))
pool._clear()
gc.collect()
for p in multiprocessing.active_children():
p.terminate()
gc.collect()
print("We have so many active children: ", multiprocessing.active_children()) # Returns []
上面的代码在我的 mac 上运行良好。但是,当我将它上传到具有以下规格的集群上时,我得到了它在第一次迭代后卡住的错误:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04 LTS"
这是pathos的多处理库文件的链接