В модуле Python multiprocessing.poolсуществует два метода параллельного выполнения функций: map_asyncи imap. Вот разница между ними:
map_async: этот метод применяет функцию к каждому элементу в итерации и немедленно возвращает объектAsyncResult. Он не блокирует основной процесс и позволяет выполнять другие задачи во время обработки вызовов функций. Вы можете использовать методget()объектаAsyncResultдля получения результатов.
Вот пример использования map_async:
from multiprocessing import Pool
def square(x):
return x 2
if __name__ == '__main__':
with Pool() as pool:
result = pool.map_async(square, range(10))
pool.close()
pool.join()
print(result.get())
В этом примере square — это функция, вычисляющая квадрат числа. Метод pool.map_asyncприменяет функцию squareк каждому числу в диапазоне от 0 до 9. Объект AsyncResultresultполучен, и для получения результатов вызывается метод get().
imap: этот метод похож наmap_async, но возвращает итератор, который возвращает результаты по мере их появления. Это позволяет обрабатывать результаты в режиме реального времени по мере их генерации, а не ждать, пока все результаты будут готовы.
Вот пример использования imap:
from multiprocessing import Pool
def square(x):
return x 2
if __name__ == '__main__':
with Pool() as pool:
result = pool.imap(square, range(10))
for res in result:
print(res)
В этом примере вместо использования map_asyncмы используем imapдля получения итератора result. Затем мы можем перебрать result, чтобы получить результаты по мере их появления и распечатать их.