Kak распределить итерации цикла на несколько процессов?

Есть цикл, делающий N итераций.

Как максимально просто (можно использовать сторонние библиотеки) распределить итерации этого цикла на P процессов, чтобы ускориться примерно в P раз?

Следующая итерация не зависит от результатов предыдущей.


Ответы (1 шт):

Автор решения: MaxU

Из известных мне модулей, максимально просто это реализовано в joblib.Parallel:

>>> from math import sqrt
>>> from joblib import Parallel, delayed
>>> Parallel(n_jobs=2)(delayed(sqrt)(i ** 2) for i in range(10))
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]

NOTE: при распараллеливании работы на N частей, практически никогда не удаётся достичь ускорения в N раз. Всегда существуют накладные расходы. В некоторых редких случаях после распараллеливания код работает даже медленнее чем исходный последовательный вариант.

→ Ссылка