所以我试着按照这里的例子: Python multiprocessing pool.map for multiple arguments
如果我有三个参数并且我需要将第三个固定为一个值,例如像这样的东西,但它不起作用。提出TypeError,说partial_merge()只需要2个参数,但只有1个参数。
import multiprocessing
from functools import partial
def merge_names(a, b, c):
return '{} & {} & {}'.format(a, b, c)
if __name__ == '__main__':
names = [('Brown', 'Wilson'), ('Bartlett', 'Rivera'), ('Molloy', 'Opie')]
pool = multiprocessing.Pool(processes=3)
results = pool.map(partial(merge_names, c='Hello'), names)
pool.close()
pool.join()
print(results)
答案 0 :(得分:1)
pool.map()
的工作方式类似于'normal'map()
:它接受一个缺少参数和列表的函数,并将函数应用于列表的每个元素。解决问题的最简单方法是修改你的功能:
def merge_names(tup, c):
a, b = tup
return '{} & {} & {}'.format(a, b, c)
根据您的目标/设置,还有其他可能性(复杂性增加):
闭包。例如:
def func(x):
return x + y
def main():
y = 5 # the point is to declare this BEFORE Pool() is initiated
p = mp.Pool(3)
data = range(10)
results = p.map(func, data)
队列和管道:请参阅documentation on queues and pipes
不使用游泳池而是使用mp.Process()
,这样可以更好地控制参数等等。