【问题标题】:multiprocessing Pool.map function issue多处理 Pool.map 功能问题
【发布时间】:2014-08-01 08:17:20
【问题描述】:

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

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)

【问题讨论】:

    标签: python python-3.x multiprocessing


    【解决方案1】:

    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)
    

    【讨论】:

    • 一如既往的完美。 Thnaks Dano
    猜你喜欢
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 2018-08-31
    • 2019-12-11
    • 2017-04-02
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多