我有一个类似下面的函数,它带有一个列表和一个路径:
def my_function(items_list,directory):
return(resulting number of analyzing items_list for example [a,b] using specific file for example 'c:\\path')
进行并行计算,我使用多处理模块如下:
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()缺少1个必需的位置参数:'directory'
我多次更改了对象列表格式,但它一直给我同样的错误。 有谁知道问题是什么? (我在Windows 7上使用python33)
答案 0 :(得分:7)
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)