Я делаю некоторые вычисления для больших коллекций байтов. Процесс работает с кусками байтов. Я пытаюсь использовать параллельную обработку с использованием многопроцессорности для повышения производительности. Сначала я пытался использовать pool.map, но он допускал только один аргумент, затем я узнал о pool.starmap. Но pool.starmap дает результаты только тогда, когда все процессы завершены. Мне нужны результаты по мере их поступления (вроде). Я пытаюсь использовать pool.imap, который предоставляет результаты по завершении процессов, но не допускает нескольких аргументов (моя функция требует 2 аргумента). Кроме того, важна последовательность результатов.
Пример кода ниже:
pool = mp.Pool(processes=4)
y = []
for x in pool.starmap(f, zip(da, repeat(db))):
y.append(x)
Приведенный выше код работает, но дает результаты только после завершения всех процессов. Я не вижу никакого прогресса. Вот почему я попытался использовать pool.imap, работает хорошо, но только с одним аргументом:
pool = mp.Pool(processes=4)
y = []
for x in pool.imap(f, da)):
y.append(x)
При нескольких аргументах возникает следующее исключение:
TypeError: f() missing 1 required positional argument: 'd'
Ищете простой способ выполнить все 3 требования:
- параллельная обработка с использованием нескольких параметров/аргументов
- удается видеть прогресс во время работы процессов
- упорядоченные результаты.
Спасибо!