Ответ
Модуль multiprocessing
в Python предназначен для решения CPU-bound (вычислительно-интенсивных) задач. Он позволяет обойти Global Interpreter Lock (GIL) путем создания отдельных процессов, каждый из которых имеет собственный интерпретатор Python и изолированную память.
Это обеспечивает настоящий параллелизм, позволяя программе полностью утилизировать все ядра процессора.
Основные сценарии использования:
- Параллельные вычисления: Распределение тяжелых математических расчетов, обработки больших наборов данных (например, в data science) или рендеринга по нескольким ядрам.
- Ускорение CPU-bound операций: Любые задачи, где производительность упирается в скорость процессора, а не в ожидание ответа от сети или диска.
- Изоляция задач: Выполнение кода в отдельных процессах повышает стабильность, так как ошибка в одном процессе не повлияет на остальные.
Пример: Использование Pool
для распараллеливания
Пул процессов позволяет легко распределить выполнение функции по набору данных.
from multiprocessing import Pool
import time
def cpu_intensive_task(x):
# Имитация сложной вычислительной задачи
return x * x
if __name__ == '__main__':
# Создаем пул из 4 рабочих процессов
with Pool(4) as p:
# Распределяем данные [0, 1, ..., 9] между процессами
results = p.map(cpu_intensive_task, range(10))
print(results)
# Вывод: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
В отличие от модуля threading
, который ограничен GIL и лучше подходит для I/O-bound задач, multiprocessing
обеспечивает реальное параллельное выполнение кода.