Назад к подготовке

async, threading и multiprocessing в Python

Когда использовать async, threading и multiprocessing в Python, и как GIL влияет на этот выбор?

Ответить самому

Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.

Загрузка

Короткий ответ

async/threading подходят для I/O-bound задач, multiprocessing - для CPU-bound Python кода; GIL мешает параллельному исполнению Python bytecode в threads.

Полный разбор

asyncio хорош, когда много сетевых или файловых ожиданий и код можно писать в cooperative style. Threads тоже удобны для I/O-bound задач, особенно когда библиотека блокирующая, но GIL не дает двум Python threads одновременно исполнять CPU-bound bytecode.

Для CPU-bound задач на чистом Python используют multiprocessing или выносят вычисления в native code, который освобождает GIL. В ML/NumPy/PyTorch часть операций выполняется в C/CUDA и может эффективно параллелиться вне GIL.

В production выбор зависит от нагрузки: web API с внешними calls - async/thread pool; тяжелый feature extraction на CPU - processes/queue; GPU inference - batching и отдельный worker pool.

Типичные ошибки

  • Говорить, что threads всегда бесполезны из-за GIL.
  • Использовать multiprocessing для легкого I/O.
  • Не учитывать serialization overhead между processes.

Как отвечать на собеседовании

  • Раздели I/O-bound и CPU-bound.
  • Упомяни, что native ML libraries часто обходят GIL.