并行运行不同的函数,得到特定ord中的返回值

2024-03-29 11:09:08 发布

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

我希望并行运行不同的函数(foo、bar和baz),然后按调用顺序获取每个函数返回的值。在

我尝试了类似下面的代码,但由于某些原因,它在Windows上永远循环。是否可以使用例如multiprocessing来实现这一点?请注意,这些函数应该以相同的事物(即数据)作为参数。在

注意:下面的代码是针对Python3的,我需要一个Python2.7的等效代码,因为我需要使用它。在

from concurrent.futures import ProcessPoolExecutor
from operator import itemgetter

def foo(data):
    return "foo"

def bar(data):
    return "bar"

def baz(data):
    return "baz"

work = [foo, bar, baz]
data = [1,2,3,4,5]

results = []

with ProcessPoolExecutor(max_workers=4) as pool:
    for i, work_item in enumerate(work):
        future = pool.submit(work_item, data)
        def callback(ret):
            results.append((i, ret.result()))
        future.add_done_callback(callback)

results.sort(key=itemgetter(0))
print(results)

Tags: 函数代码fromimportdatareturnfoodef
1条回答
网友
1楼 · 发布于 2024-03-29 11:09:08

我对你的回调方法做了一点改变,我猜是你想要的。检查结果:

...
with ProcessPoolExecutor(max_workers=4) as pool:
    for i, work_item in enumerate(work):
        future = pool.submit(work_item, data)
        def callback(i):
            def wrapper(ret):
                print(ret, i)
                results.append((i, ret.result()))
            return wrapper
        future.add_done_callback(callback(i))
...

结果如下:

^{pr2}$

我用python3在macosx上运行这个代码。我希望有帮助。在

对于python 2.7,可以尝试如下操作:

^{3}$

结果是:

{0: 'foo', 1: 'bar', 2: 'baz'}

How can I recover the return value of a function passed to multiprocessing.Process?

相关问题 更多 >