函数列表的并行执行

2024-04-26 03:43:19 发布

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

因此,使用多进程模块,可以很容易地使用以下不同参数并行运行函数:

from multiprocessing import Pool

def f(x):
    return x**2


p = Pool(2)
print(p.map(f, [1, 2]))

但我感兴趣的是对同一个参数执行一系列函数。假设我有以下两个函数:

^{pr2}$

对于同一个参数(例如x=1),如何并行执行它们?在


Tags: 模块函数fromimportmap参数return进程
1条回答
网友
1楼 · 发布于 2024-04-26 03:43:19

您可以使用Pool.apply_async()来实现这一点。将任务以(函数,参数元组)的形式打包,并将每个任务提供给apply_async()。在

from multiprocessing import Pool
from itertools import repeat


def f(x):
    for _ in range(int(50e6)): # dummy computation
        pass
    return x ** 2


def g(x):
    for _ in range(int(50e6)): # dummy computation
        pass
    return x ** 3


def parallelize(n_workers, functions, arguments):
    # if you need this multiple times, instantiate the pool outside and
    # pass it in as dependency to spare recreation all over again
    with Pool(n_workers) as pool:
        tasks = zip(functions, repeat(arguments))
        futures = [pool.apply_async(*t) for t in tasks]
        results = [fut.get() for fut in futures]
    return results


if __name__ == '__main__':

    N_WORKERS = 2

    functions = f, g
    results = parallelize(N_WORKERS, functions, arguments=(10,))
    print(results)

输出示例:

^{pr2}$

相关问题 更多 >