Pathos.multiprocessing 的池似乎是非本地的?

Posted

技术标签:

【中文标题】Pathos.multiprocessing 的池似乎是非本地的?【英文标题】:Pathos.multiprocessing's Pool appears to be nonlocal? 【发布时间】:2018-09-28 00:48:01 【问题描述】:

我的代码可以

from pathos.multiprocessing import ProcessingPool
def myFunc(something):
    thispool = ProcessingPool(nodes=Result.cores)
    listOfResults = thispool.map(something)
    return listOfResults

for i in range(1000):
    myFunc(i)

现在,在我实际涉及更多的代码中,内存使用量一直在增长。代码应该什么都不占用,但如果我用 12 个内核运行它,这 12 个内核最初会占用将近 1mb 内存,但在几个小时的运行时间之后,每个内核将占用几个 GB。

所以,我认为该池会泄漏内存,因此我最好在每次迭代后关闭它:

def myFunc(something):
    thispool = ProcessingPool(nodes=Result.cores)
    listOfResults = thispool.map(something)
    thispool.close()
    thispool.join()
    return listOfResults

但是,现在,经过几次迭代,我得到了

ValueError: Pool not running

this pool.map() 行。如果我创建一个新的

test = ProcessingPool(nodes=4)

并尝试运行test.map(),我得到同样的错误。很奇怪,我已经初始化了一个新变量...pathos.processing.ProcessingPool 是否具有唯一进程池的功能,如果我关闭一个,我将关闭 all

在没有内存泄漏的情况下,在循环内实现pathos.multiprocessing.ProcessingPool 的正确方法是什么?

当我改用multiprocessing.Pool 时,不会出现问题。

【问题讨论】:

【参考方案1】:

事实证明,通过一些后端魔法,pathos 确实防止了相同类型的池的多个实例被初始化。

为了防止泄漏,可以在每次迭代结束时做

thispool.terminate()
thispool.restart()

【讨论】:

我是pathos 作者。肯定是这样的。

以上是关于Pathos.multiprocessing 的池似乎是非本地的?的主要内容,如果未能解决你的问题,请参考以下文章

多处理-> pathos.multiprocessing 和 windows

TypeError:“MapResult”对象不可使用 pathos.multiprocessing 进行迭代

pathos pools:在 N 个任务后更新工作进程

Pathos 多处理不能调用类中的任何包和函数

Python Multiprocessing 多进程,使用多核CPU计算 并使用tqdm显示进度条

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