Python 多处理 : How to add or change number of processes in a pool

标签 python process multiprocessing pool

我已经从 python 多处理模块创建了一个池,并且想更改池中正在运行的进程数或添加到其中。这可能吗?我试过这样的事情(我的代码的简化版本)

class foo:
    def __init__():
        self.pool = Pool()
    def bar(self, x):
        self.pool.processes = x
        return self.pool.map(somefunction, list_of_args)

它似乎有效并最终实现了我想要的结果(即在多个进程之间拆分工作)但我不确定这是最好的方法,也不确定它为什么有效。

最佳答案

我认为这实际上行不通:

import multiprocessing, time

def fn(x):
    print "running for", x
    time.sleep(5)

if __name__ == "__main__":
    pool = multiprocessing.Pool()
    pool.processes = 2

    # runs with number of cores available (8 on my machine)
    pool.map(fn, range(10))

    # still runs with number of cores available, not 10
    pool.processes = 10
    pool.map(fn, range(10))

multiprocessing.Pool 将进程数存储在私有(private)变量(即 Pool._processes)中,该变量在 Pool 被实例化时设置。查看source code .

这似乎有效的原因是因为进程数自动设置为当前机器上的核心数,除非您指定不同的数字。

我不确定您为什么要更改可用进程的数量——也许您可以更详细地解释一下。尽管您可以随时创建一个新池(大概是在其他池完成运行之后),但创建一个新池非常容易。

关于Python 多处理 : How to add or change number of processes in a pool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10016217/

相关文章:

linux - Bash:从 pid 获取规范路径和参数

C child 读给 "resource temporarily unavailable"

java - 获取刚刚启动的进程的PID

python - Django、Signals 和另一个进程

python - 我如何分发小批量 kmeans (scikit-learn) 的处理?

python - 如何计算 QTreeWidget 内容的高度?

python - 根据子字符串拆分列表元素

python - 无法安装geopandas

python - 查找具有指定文本的元素旁边的元素

python - python多处理中的共享变量