GIL в Python: потоки, процессы и производительность
Уроки курсаGIL в Python: потоки, процессы и производительность
CPU-bound и I/O-bound задачи
Если код большую часть времени вычисляет в чистом Python, два потока обычно не дают двукратного ускорения. Для использования нескольких ядер подходят multiprocessing, ProcessPoolExecutor или библиотека, которая выполняет тяжёлую работу в нативном коде и освобождает GIL.
Если задача в основном ждёт сеть, базу данных или диск, можно использовать threading, ThreadPoolExecutor либо asyncio — выбор зависит от доступных библиотек и архитектуры приложения. Потоки удобны вокруг синхронных API, asyncio — при большом числе неблокирующих соединений.
Процессы имеют цену: отдельная память, сериализация аргументов, запуск worker и более сложная диагностика. Небольшой расчёт может стать медленнее из-за накладных расходов.
