使用pool.map在Python中运行多个函数

2024-06-11 12:43:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要并行运行多个函数。我试过这个

from multiprocessing import Pool

def smap(f, *args):
    return f(*args)

def somma(*args):
    a=args[0]
    b=args[1]
    return a+b

def prodotto(*args):
    a=args[0]
    b=args[1]
    return a*b

pool = Pool(processes=2)
a=2
b=4
res=pool.map(smap, [(somma,a,b),(prodotto,a,b)])
print(res)

出现以下错误:

TypeError: 'tuple' object is not callable

怎么了


Tags: 函数fromimportmapreturndefargsres
3条回答

您希望pool.map内部为您在smap中进行解包,但这是逻辑无法处理的事情。你需要自己明确地做这件事

def smap(params): 
    function, *args = params 

    return function(*args) 

只需使用starmap,因为map只支持一个iterable参数 https://docs.python.org/3/library/multiprocessing.html#multiprocessing.pool.Pool.starmap

您正在将整个元组作为第一个参数f传递给函数smap,该函数不是您想要的函数。您可以将smap更改为:

def smap(f_args):
    f, *args = f_args
    return f(*args)

这将正确地只接受调用内来自Pool.mapfargs的一个参数

相关问题 更多 >