Разница между pool.map и pool.map_async в Python

15 ИЮНЯ 2022

------------------------------------------------------------------------

Наш телеграм-канал: t.me/@mailsgun_online

Youtube: youtube.com/@mailsgun_online

------------------------------------------------------------------------

Обновить


temabed
2 часа назад

Уровень сложности
Простой
Время на прочтение
2 мин

Количество просмотров 371


Туториал

Еще одна статья-шпаргалка о модуле multiprocessing в Python, без воды, от новичка для новичков многопроцессорного программирования.

pool.map и pool.map_async являются методами модуля multiprocessing.Pool в Python, которые позволяют параллельно выполнять функции на нескольких процессах.

  1. pool.map: Этот метод блокирует выполнение программы до тех пор, пока все задачи не будут завершены. Он принимает функцию и список аргументов, применяет функцию к каждому аргументу в списке и возвращает результаты в том же порядке, в котором они были переданы в список. Этот метод подходит для случаев, когда нужно дождаться завершения всех задач перед продолжением выполнения программы.

  2. pool.map_async: Этот метод также принимает функцию и список аргументов, но не блокирует выполнение программы. Вместо этого он возвращает объект multiprocessing.pool.AsyncResult, который позволяет асинхронно отслеживать статус выполнения каждой задачи и получать результаты по мере их завершения. Этот метод удобен, когда нужно продолжить выполнение программы без ожидания завершения всех задач.

Таким образом, основное различие между pool.map и pool.map_async заключается в том, что первый блокирует выполнение программы, а второй позволяет продолжить выполнение программы без ожидания завершения всех задач.

Вот примеры использования pool.map и pool.map_async в Python:

Пример использования pool.map:

import multiprocessing
def square(x):
    return x * x
if __name__ == "__main__":
    pool = multiprocessing.Pool()
    numbers = [1, 2, 3, 4, 5]
    results = pool.map(square, numbers)
    print(results)

В этом примере мы создаем пул процессов pool, определяем функцию square, которая возвращает квадрат числа, и список чисел numbers. Метод pool.map(square, numbers) применяет функцию square к каждому элементу списка numbers параллельно на нескольких процессах и возвращает результаты в том же порядке.

Пример использования pool.map_async:

import multiprocessing
def cube(x):
    return x * x * x
if __name__ == "__main__":
    pool = multiprocessing.Pool()
    numbers = [1, 2, 3, 4, 5]
    async_result = pool.map_async(cube, numbers)
    # Продолжаем выполнение программы без ожидания завершения задач
    async_result.wait()  # Ожидаем завершения всех задач
    results = async_result.get()
    print(results)

В этом примере мы также создаем пул процессов pool, определяем функцию cube, список чисел numbers, и используем метод pool.map_async(cube, numbers), чтобы асинхронно применить функцию cube к каждому элементу списка. Мы продолжаем выполнение программы без ожидания завершения задач, а затем вызываем async_result.wait() для ожидания завершения всех задач и получаем результаты с помощью async_result.get().

Оба этих метода позволяют использовать параллельные вычисления для ускорения выполнения задач.

Подробнее, но так же лаконично, о модуле multiprocessing можете прочитать в этой статье.

Серия занятий «Тренировки по алгоритмам 5.0» от Яндекса

Дата 1 марта – 19 апреля
Время
Место

Онлайн

Московский туристический хакатон

Дата 23 марта – 7 апреля

Место

Москва • Онлайн

Геймтон «DatsEdenSpace» от DatsTeam

Дата
Время 17:00 – 20:00
Место

Онлайн

PG Bootcamp 2024

Дата
Время 09:30 – 21:00
Место

Минск • Онлайн

EvaConf 2024

Дата
Время 11:00 – 16:00
Место

Москва • Онлайн

Ну и напоследок напоминаю вам о нашем новом проекте vkserfing bot.