如何 运行 多个函数并行地 return 各自的列表

How to run multiple functions to return respective lists in parallel

在示例代码中,我想 运行 4 个并行函数,return 列出每个函数的值。 multiprocessing 包是否适合这项任务?如果可以,我该如何实施?

示例代码:

from multiprocessing import Pool

def func_a(num):
    return([1+num,2+num,3+num])

def func_b(num):
    return([10+num,11+num,12+num])

def func_c(num):
    return([20+num,21+num,22+num])

def func_d(num):
    return([30+num,31+num,32+num])

if __name__ == '__main__':
    pool = Pool(processes=2)

    list_a = ???
    list_b = ???
    list_c = ???
    list_d = ???

    full_list = []
    for item in list_a:
        full_list.append(item)
    for item in list_b:
        full_list.append(item)
    for item in list_c:
        full_list.append(item)
    for item in list_d:
        full_list.append(item)

非常感谢任何信息。提前致谢。

Process Pools 中所述,您需要将所有作业提交到池中,然后等待所有结果。

我不确定你想传递给这些函数的参数是什么,因为它不在你的问题或你的代码中,但我会随意编造一些东西。

if __name__ == '__main__':
    pool = Pool(processes=2)

    result_a = pool.apply_async(func_a, (23,))
    result_b = pool.apply_async(func_b, (42,))
    result_c = pool.apply_async(func_c, (fractions.Fraction(1, 2),))
    result_d = pool.apply_async(func_a, (1j * math.pi,))

    full_list = []
    for item in result_a.get():
        full_list.append(item)
    for item in result_b.get():
        full_list.append(item)
    for item in result_c.get():
        full_list.append(item)
    for item in result_d.get():
        full_list.append(item)

您可以通过多种方式显着简化这一点(例如,每个 for 循环都可以通过对 extend 的一次调用来替换,或者您可以只写 full_list = result_a.get() + result_b.get() + result_c.get() + result_d.get()),但这是对现有代码的最小更改。(如果您真的想简化此代码,我认为您首先会更喜欢 concurrent.futures.ProcessPoolExecutor。)

假设(因为我的问题从未得到回答)每个函数接收相同的数字:

def apply_func(f):
    return f(3)

full_list = sum(pool.map(apply_func, [func_a, func_b, func_c, func_d]), [])