首页 > 解决方案 > 如何在 Python 库函数中使用并行化?

问题描述

我定义了一个函数 FactorTest.py,它接收一个变量 x 并a():return x+1, b():return x+2, c():return x+3 and d():return x+4以并行方式调用函数。

然后我将FactorTest.py另一个程序作为库函数导入。当我调用FactorTest并设置 x = 0 时,它会得到返回[x+1,x+2,x+3,x+4],即[1,2,3,4].

有什么办法可以实现吗?重点是并行化的方式。

标签: pythonparallel-processing

解决方案


那是一种不明显的事情。如果您真的要进行计算(这是受 CPU 限制的操作),您可以从并发方法(异步和线程 - 因为 Python 线程是有限的GIL)中受益。这意味着,唯一接近它的是使用进程,你可以看看multiprocessing.PoolProcessPoolExecutor

这种方法的缺点是产生进程的成本。它有资源开销,这意味着您可以考虑为每个进程执行一些操作,而不是为每个计算运行一个专用进程。

import functools
import concurrent.futures

def action(x, y):
    return x + y

def factor(x, sum_range=4):
    result = []
    callback = functools.partial(action, x)
    with concurrent.futures.ProcessPoolExecutor() as executor:
        for num in executor.map(callback, range(1, sum_range+1)):
            result.append(num)
    return result


print(factor(2))
# > [3, 4, 5, 6]

推荐阅读