Какие планы у Python по снятию GIL в версиях 3.13 и 3.14
Что проверяют
Следите ли вы за развитием языка и отличаете ли реальное положение дел от слуха «GIL убрали». Следом обычно спрашивают, ускорит ли это ваш код и что будет с библиотеками на C.
Как отвечать
Опорный документ PEP 703: GIL становится опциональным постепенно, в несколько фаз. Steering Council принял его в 2023 году, оставив за собой право откатить изменения, если они окажутся слишком болезненными для экосистемы.
- Python 3.13: появилась экспериментальная free-threaded сборка, отдельный бинарник
python3.13t, собирается с--disable-gil. Обычная сборка по-прежнему с GIL. В однопоточном коде вариант без GIL был заметно медленнее, в том числе потому, что в нём отключён специализирующий интерпретатор; - Python 3.14: по PEP 779 free-threaded сборка стала официально поддерживаемой, но по умолчанию её всё ещё нет. Специализация вернулась, и накладные расходы в однопоточном коде по документации составляют примерно от 5 до 10%;
- что дальше: сделать сборку без GIL основной собираются только после того, как её примет экосистема, конкретной версии нет;
- как проверить:
sys._is_gil_enabled(). В free-threaded сборкеPYTHON_GIL=1или-X gil=1включают GIL обратно. Если импортировать C-расширение, не объявившее поддержку, интерпретатор сам включит GIL и выдаст предупреждение; - параллельный путь: в 3.14 появились модуль
concurrent.interpreters(PEP 734) иInterpreterPoolExecutor, то есть субинтерпретаторы, у каждого из которых свой GIL (PEP 684).
Внутри free-threading держится на смещённом подсчёте ссылок, бессмертных объектах и аллокаторе mimalloc.
Где спотыкаются
Говорят, что в 3.13 GIL убрали. Его нет только в отдельной экспериментальной сборке, обычный python3.13 работает как раньше.
Считают, что без GIL код стал потокобезопасным. Встроенные dict и list не развалятся, но составная операция вроде counter += 1 без threading.Lock по-прежнему даёт гонки.
Ждут ускорения для I/O-кода. Сетевые запросы и asyncio и так почти не упирались в GIL. Выигрыш получают CPU-задачи в потоках, и только если все их C-зависимости собраны под free-threading.