Короткий ответ
multiprocessing.Pool — пул рабочих процессов, которым можно раздавать задачи для параллельного выполнения; он подходит для CPU-bound задач, где нужно реальное параллельное использование нескольких ядер процессора.
Как это работает подробнее
Pool создаёт заданное число процессов-воркеров; методы map/apply/starmap распределяют входные данные между воркерами, каждый выполняет функцию в своём процессе с собственным GIL, а результаты сериализуются (pickle) и возвращаются в основной процесс.
Пример кода
example-256.py
from multiprocessing import Pool
def heavy_square(n):
return sum(i * i for i in range(n))
if __name__ == "__main__":
with Pool(processes=4) as pool:
results = pool.map(heavy_square, [10_000_000] * 4)
print(results)
# Проверка: суммарное время выполнения на 4 ядрах заметно меньше,
# чем последовательный вызов heavy_square 4 раза в одном процессеЧто использовать на практике
- Практика.
Poolэффективен для однотипных вычислительно тяжёлых задач над набором входных данных (обработка изображений, числовые расчёты), когда объём работы на одну задачу существенно больше накладных расходов на создание процесса и передачу данных.
Подводные камни
- Риски. Передают в
Poolфункции с несериализуемыми объектами — pickle падает с ошибкой; используютPoolдля задач с частым обменом небольшими данными, где издержки межпроцессного взаимодействия превышают выигрыш от параллелизма.