Python для профессионаловОткрытые материалыGIL в Python: потоки, процессы и производительность

GIL в Python: потоки, процессы и производительность

Уроки курсаGIL в Python: потоки, процессы и производительность

CPU-bound и I/O-bound задачи

Если код большую часть времени вычисляет в чистом Python, два потока обычно не дают двукратного ускорения. Для использования нескольких ядер подходят multiprocessing, ProcessPoolExecutor или библиотека, которая выполняет тяжёлую работу в нативном коде и освобождает GIL.

Если задача в основном ждёт сеть, базу данных или диск, можно использовать threading, ThreadPoolExecutor либо asyncio — выбор зависит от доступных библиотек и архитектуры приложения. Потоки удобны вокруг синхронных API, asyncio — при большом числе неблокирующих соединений.

Процессы имеют цену: отдельная память, сериализация аргументов, запуск worker и более сложная диагностика. Небольшой расчёт может стать медленнее из-за накладных расходов.