多处理Pool.map函数问题

时间:2014-08-01 08:17:20

标签: python python-3.x multiprocessing

我有一个类似下面的函数,它带有一个列表和一个路径:

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)

1 个答案:

答案 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)