Python中multiprocessing.Pool运行带多个参数的函数

在python中经常会到用多线程处理某个函数来缩短运行时间,但通常multiprocessing.Pool的map函数只接受一个可迭代参数。

from multiprocessing import Pool

def work(x):
    return x+1
pool = Pool(processes=4) # 4个线程
x = [1,2,3,4,5,6]
results = pool.map(work, x)
print results

运行上面的程序就会多线程处理并打印出输入x的计算结果。

但是这个函数仅允许函数的输入变量为1,如果函数需要多个参数输入,那个就无法用上面的程序。比如:

def work(x, y):
    return x + y

当附加参数y为固定参数时,一种比较有效的方法是,用partial函数提取主要的一个参数固定其他参数。

比如,我们想用x去加一个固定值,那么我们就认为x是主要参数,固定y:

from functools import partial

partial_work = partial(work, y=1) # 提取x作为partial函数的输入变量
results = pool.map(partial_work, x)

总结:当函数的参数在不同时候的输入均不同,那么这种方法不太合适,可参考 https://www.cnblogs.com/arkenstone/p/6830714.html 的方法2和方法3。

猜你喜欢

转载自www.cnblogs.com/AliceYing/p/11776060.html