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

Python 3.13 сделал GIL опциональным: теперь можно запускать многопоточные программы без глобальной блокировки интерпретатора. Разбираемся, что изменилось и как использовать no-GIL режим на практике.

Обложка: Python стал производительнее: GIL теперь опционален

Релиз Python 3.13 принес с собой значительное новшество — возможность отключения Global Interpreter Lock (GIL).

Пока что функция доступна в экспериментальном режиме, но уже сейчас она открывает новые горизонты для многопоточной обработки данных в Python.

Ключевые выводы

Python 3.13 впервые позволяет отключить GIL — механизм, ограничивавший истинную многопоточность в CPython на протяжении десятилетий.

Режим no-GIL активируется флагом --disable-gil, переменной окружения PYTHON_GIL=0 или опцией -X gil=0.

Многопоточные задачи при отключённом GIL выполняются значительно быстрее; однопоточные и многопроцессорные сценарии могут показать лёгкое снижение скорости.

Функция экспериментальная — требует дополнительного тестирования, но уже сейчас демонстрирует потенциал Python в высоконагруженных многопоточных средах.

Что такое GIL?

GIL — это механизм, который используется интерпретатором CPython для того, чтобы только один поток мог выполнять байт-код Python в каждый момент времени. Это ограничение значительно влияет на производительность многопоточных приложений, особенно на многоядерных системах.

Экспериментальный режим

В версии Python 3.13 появилась возможность отключения GIL, что позволяет потокам работать более параллельно.

Эта функция доступна при установке Python с опцией --disable-gil, а также может управляться с помощью переменной окружения PYTHON_GIL или через командную строку с опцией -X gil.

Производительность с и без GIL

Для демонстрации различий в производительности был использован простой Python-скрипт, который вычисляет факториалы чисел с использованием одного потока, нескольких потоков и нескольких процессов.

Результаты показали, что при отключении GIL многопоточные задачи выполняются значительно быстрее, хотя однопоточные и многопроцессорные задачи могут демонстрировать небольшое снижение производительности.

Если вы только осваиваете язык или хотите углубить знания — читайте наш большой материал: Python: полный путеводитель от первой строчки до продвинутых тем.

Часто задаваемые вопросы
1
Что такое GIL в Python?

GIL (Global Interpreter Lock) — глобальная блокировка интерпретатора в CPython, которая позволяет одновременно выполняться только одному потоку Python-кода. Это упрощает управление памятью, но ограничивает производительность многопоточных приложений на многоядерных процессорах.

2
Python 3.13 убрал GIL?

Нет, GIL не убран полностью — он стал опциональным. В Python 3.13 появился экспериментальный режим, позволяющий отключить GIL при сборке интерпретатора (--disable-gil) или во время запуска программы. По умолчанию GIL всё ещё включён для обратной совместимости.

3
Станет ли Python быстрее без GIL?

Для многопоточных задач — заметно быстрее: потоки смогут реально работать параллельно на нескольких ядрах CPU. Однопоточный и многопроцессорный код может незначительно замедлиться из-за усложнения управления памятью. Итоговый выигрыш зависит от конкретной задачи.

4
Как включить no-GIL режим в Python 3.13?

Три способа: 1) собрать Python с флагом --disable-gil; 2) установить переменную окружения PYTHON_GIL=0 перед запуском; 3) запустить скрипт с опцией -X gil=0. Убедитесь, что используемые C-расширения поддерживают работу без GIL.

Отметим, что отключение GIL — это важный шаг вперед для Python, который приближает язык к более эффективной работе в многопоточных средах.

В то же время, как и любая экспериментальная функция, она требует дальнейшего тестирования и доработки. Однако уже сейчас видно, что Python движется в сторону улучшения производительности и гибкости для разработчиков.