Реализация модели с форк-присоединением для Python?(Эквивалентно ForkJoinPool Java) - PullRequest
0 голосов
/ 01 марта 2019

Я ищу реализацию модели fork-join для Python.Как и Java ForkJoinPool, он должен позволять рекурсивно разделять (разбивать) работу задачи на несколько подзадач.После выполнения подзадач результаты объединяются и возвращаются.В идеале он должен поддерживать потоки и процессы, похожие на ThreadPoolExecutor и ProcessPoolExecutor в concurrent.futures, но потоки сейчас более важны.Он должен позволять ограничивать количество потоков (я хочу иметь один поток на ядро).Я знаю, что это будет полезно, только если код выпускает 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

Есть ли такая библиотека в Python?Я не мог найти один.

1 Ответ

0 голосов
/ 01 марта 2019

Я подумал, что вы хотите собрать результат, возможно, 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]
...