我正在寻找Python的fork-join model实现。作为Java的ForkJoinPool,它应该允许递归地将一个任务的工作拆分成几个子任务。子任务完成后,将合并并返回结果。理想情况下,它应该支持线程和进程,类似于concurrent.futures中的ThreadPoolExecutor和ProcessPoolExecutor,但线程现在更重要。它必须允许限制线程数(我希望每个核心有一个线程)。我知道,只有在代码发布GIL时,这才有用。
Wikipedia中的示例来阐明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
Python中有这样的库吗?我找不到。
最佳答案
我想您需要的是收集结果,可以选择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]
关于python - Python的Fork-join模型实现? (相当于Java的ForkJoinPool),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54938449/