Multiprocessing.Pool用于常规功能?

时间:2013-12-09 14:54:27

标签: python map multiprocessing

我有一个计算数百万行数据的函数,以及使用多处理可以更快地完成的工作 在此之前,我仅使用Poolmap类似:

from multiprocessing.dummy import Pool

pool = Pool(20)
pool.map(my_function, data_list)

但是我的函数有两个参数:公司列表和字典,其中csv个文件作为值 所以我的问题是,如何在我的函数中使用多处理?

2 个答案:

答案 0 :(得分:2)

您可以使用列表来包含所有参数,然后该函数只接受一个参数并解析函数中的参数。

答案 1 :(得分:1)

查看Pool.map()

的定义
def map(self, func, iterable, chunksize=None):

从语义的角度来看,方法Pool.map()只是将函数应用于iterable,即函数必须只有一个变量参数,它从iterable中获取一个值。因此,该函数必须只有一个参数,或者具有带有固定值的其他参数的变量参数。

所以有一些解决方案:

  • 使用 functools.partial()函数来修复函数中的其他参数,Python multiprocessing pool.map for multiple arguments
  • 中对此进行了描述
  • 使用list或tuple作为函数的唯一参数,它封装了函数所需的参数
  • 请勿使用Pool.map()。使用multiprocessing.Process()生成每个进程,然后将它们添加到池中