[英]python multiprocessing using multiple arguments
我可以使用多重处理来轻松地设置对“ func”的并行调用,如下所示:
import multiprocessing
def func(tup):
(a, b) = tup
return str(a+b)
pool = multiprocessing.Pool()
tups = [ (1,2), (3,4), (5,6), (7,8)]
results = pool.imap(func, tups)
print ", ".join(results)
给出结果:
3, 7, 11, 15
问题是我的实际函数“ func”比此处的示例更复杂,因此我不想使用单个“ tup”参数来调用它。 我想要多个参数
以及关键字参数
。 我想做的事情如下所示,但是列表中的“ *”解压缩不起作用
(并且也不支持关键字)
:
import multiprocessing
def func(a, b):
return str(a+b)
pool = multiprocessing.Pool()
tups = [ *(1,2), *(3,4), *(5,6), *(7,8)]
results = pool.imap(func, tups)
print ", ".join(results)
那么...有没有办法在进行并行处理时获得python函数调用的全部功能?
您不能只使用字典或对象吗?
import multiprocessing
def func(a):
print(str(a['left'] + a['right']))
pool = multiprocessing.Pool()
i1 = {'left': 2, 'right': 5}
i2 = {'left': 3, 'right': 4}
pool.imap(func, [i1, i2])
这样,您就不会在方法定义中定义关键字,但是至少可以在方法主体内引用关键字。 功能输入也一样。 与处理元组相比,它更具可读性。
HarryPotfleur的评论是正确的,基本上,如果您使用的是Python 3.3+,则可以使用starmap :
星图 (func,iterable [,chunksize])
与map()
相似,除了可迭代的元素应该是作为参数解压缩的可迭代对象。因此
[(1,2), (3, 4)]
的可迭代结果导致[func(1,2), func(3,4)]
。
只需将imap
替换为starmap
。
如果您使用的是较低版本,则没有直接的方法。 相反,您可以使用中间函数
def inter(tup):
return func(*tup)
def func(a, b, c):
return str(a+b+c)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.