繁体   English   中英

使用多个参数的python多重处理

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM