Расскажи про опыт работы с многопроцессорностью (multiprocessing)
Python
Middle
Без компании
Расскажи про опыт работы с многопроцессорностью (multiprocessing)
Ответы
Модуль `multiprocessing` в Python позволяет обходить GIL, создавая отдельные процессы с собственным интерпретатором и памятью. Основные компоненты:
- `Process` — базовый класс для создания процессов
- `Pool` — пул воркеров для параллельного выполнения задач
- `Queue`, `Pipe` — механизмы межпроцессного взаимодействия
- `Lock`, `Semaphore` — синхронизация
Пример с `Pool`:
```
from multiprocessing import Pool
def square(x):
return x * x
if __name__ == '__main__':
with Pool(4) as p:
results = p.map(square, range(10))
print(results) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
```
Ключевые особенности:
- Полная изоляция процессов (нет shared memory по умолчанию)
- Более тяжеловесные чем потоки
- Лучше подходят для CPU-bound задач
- Требуют защиты точки входа `if __name__ == '__main__'` в Windows
Для обмена данными между процессами можно использовать `multiprocessing.Array`, `multiprocessing.Value` или менеджеры.