首页 > 解决方案 > 多次调用时的 multiprocessing.Pool 行为

问题描述

根据我的观察,我有一个非常简单的问题:

让我们考虑以下代码:

import multiprocessing as mp

def f(x,y):
    # Do heavy stuff

N = 8
param_to_test = [(x,y) for x in range(1000) for y in range(1000)]
with mp.Pool(processes = N) as p:
    p.starmap(f, param_to_test)

param_to_test = [(x,y) for x in range(1000, 2000) for y in range(1000, 2000)]
with mp.Pool(processes = N) as p:
    p.starmap(f, param_to_test)

param_to_test = [(x,y) for x in range(2000, 3000) for y in range(2000, 3000)]
with mp.Pool(processes = N) as p:
    p.starmap(f, param_to_test)

我们还假设每次迭代的持续时间是恒定的。我观察到,如果我mp.Pool()在我的主程序中多次调用,最后一个(似乎)比第一个慢得多。

在我的实际程序中,在每次调用with mp.Pool(), param_to_test 之前,都是根据前一个计算得出的。我知道在 python 中生成过程实际上并不快,并且可能有比生成 3 次(或更多......)相同Pool()的工人更好的编码方法。但是,在我的情况下,这个持续时间可以忽略不计。

我的问题是: Python 是否每次都正确关闭,Pool()并且在我的行为中没有任何我不知道的问题Pool()可以解释计算的逐渐减慢吗?

谢谢 :)

标签: pythonmultiprocessing

解决方案


推荐阅读