Python 的 Fork-Join 模型实现?(相当于Java的ForkJoinPool)

Joe*_*ard 6 python parallel-processing fork-join python-3.x

我正在寻找Python 的fork-join 模型的实现。作为 Java 的 ForkJoinPool,它应该允许将一个任务的工作递归地拆分(fork)为多个子任务。子任务完成后,结果将被连接并返回。理想情况下,它应该支持类似于concurrent.futures中的ThreadPoolExecutor和ProcessPoolExecutor的线程和进程,但目前线程更重要。它必须允许限制线程数量(我希望每个核心有一个线程)。我知道这只有在代码释放 GIL 时才有用。

维基百科的示例用于阐明 fork-join 模型:

solve(problem):
    if problem is small enough:
        solve problem directly (sequential algorithm)
    else:
        for part in subdivide(problem)
            fork subtask to solve(part)
        join all subtasks spawned in previous loop
        return combined results
Run Code Online (Sandbox Code Playgroud)

Python中有这样的库吗?我找不到。

小智 0

我认为你想要的是收集结果,multiprocessing.starmap() 可能是选择,这里是示例

import multiprocessing as mp

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

l = list()
with mp.Pool(mp.cpu_count()) as p:
    l = p.starmap(func, [(1,2), (2,3), (3,4)])

print(l)  # result in [3, 5, 7]
Run Code Online (Sandbox Code Playgroud)