multiprocessing Pool.map函数问题
我有一个函数,下面是它的样子,它需要一个列表和一个路径:
def my_function(items_list,directory):
return(resulting number of analyzing items_list for example [a,b] using specific file for example 'c:\\path')
为了进行并行计算,我使用了 multiprocessing 模块,代码如下:
from multiprocessing import Pool
def test_func(objs):
pool= Pool(8)
result=pool.map(my_function,objs)
return(result)
if __name__=='__main__':
objects=[([a,b],'path1',),([c,d],'path2',),.....]
result=test_funct(objects)
但是它给了我以下错误信息: TypeError: my_function() 缺少一个必需的位置参数:'directory'
我尝试了好几次更改对象列表的格式,但还是出现同样的错误。 有没有人知道问题出在哪里? (我在 Windows 7 上使用的是 Python 3.3)
1 个回答
10
multiprocessing.map
不会自动拆分你元组里的变量。所以 myfunction
只会接收到一个元组作为参数,而不是一个列表和一个字符串。
如果你使用的是 Python 3.3 及以上版本(看起来你是),你可以使用 starmap
,这个方法会自动展开元组:
result = pool.starmap(my_function,objs)
如果你使用的是 Python 3.2 或更早的版本,最简单的方法就是让 my_function
只接收一个参数,然后在函数内部展开这个元组:
def my_function(tup)
items_list, directory = tup
如果你不能修改 my_function
,可以添加一个辅助函数来帮你拆分元组:
def my_function_helper(tup):
return my_function(*tup)