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 раз. Всегда существуют накладные расходы. В некоторых редких случаях после распараллеливания код работает даже медленнее чем исходный последовательный вариант.