根据我的观察,我有一个非常简单的问题:
让我们考虑以下代码:
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()
的问题?
谢谢:)