Дата релиза Python 3.13 все ближе. Осталось буквально несколько дней. Основная причина, по которой многие так ждут эту версию - это возможность отключать GIL. Сообщество уже давно просило добавить такую возможность. Конечно, у нас есть другие интерпретаторы Python без GIL - это и Jython, и различные библиотеки, которые помогают обходить ограничения GIL, ибо они написаны на С++ или Rust (тот же numpy), еще есть multiprocessing (возможность делать параллельные вычисления за счет процессов, а не потоков). Однако, иметь возможность отключить GIL в стандартной реализации Python (CPython) очень важно, ведь это, помимо всего прочего, может ускорить развитие языка и расширение сферы его применения. И вот казалось бы, нас ждет новый дивный мир, где параллельные вычисления выйдут на новый уровень, и больше не потребуется писать библиотеки для Python на более низкоуровневых языках, чтобы обойти все ограничения. Но в этом столь ожидаемом релизе Python есть ложка дегтя, и не одна: 1️⃣ По умолчанию мы все еще будем использовать GIL. В 3.13 у нас появится возможность его отключить, но мы будем это делать на свой страх и риск. Уже было написано много кода, который не будет корректно работать с отключенной глобальной блокировкой интерпретатора. Пройдут годы, прежде чем большинство самых популярных библиотек начнут поддерживать эту возможность. Например, такая известная библиотека, как anyIO, под капотом использует threading, что говорит нам о том, что большинство популярных фреймворков, тот же FastAPI, не смогут корректно работать с отключенным GIL 2️⃣ Та версия Python, которая по умолчанию будет работать без GIL- это далеко не третий Python. Многие из тех, кто вовлечен в разработку этого языка, называют сроки подобных изменений - от 5 лет и больше. Также разработчики говорят, что не получится сделать GIL отключенным по умолчанию, не сломав обратную совместимость. Из чего можно сделать вывод, что Python окончательно избавится от GIL если только к 4 версии (если она когда-нибудь появится). 3️⃣ Python любят за то, что он достаточно простой и лаконичный. Удаление GIL неминуемо усложнит код. 4️⃣ На предрелизных сборках, один и тот же код с включенным и отключенным GIL показывал совершенно противоречивые результаты. Если в версиях программы с мультитредингом мы видели выигрыш в производительности, то синглтред версии программы становились медленнее. Надеюсь, что в релизной версии это будет исправлено. Если все так плохо, зачем оно нам? Не стоит отчаиваться: ➖ Это очень крупные изменения, эффект от которых мы увидим только через 3-5 лет. Можно рассмотреть их как шанс поучаствовать в разработке open-source проектов, ибо кто-то же должен добавлять поддержку столь желаемой фичи во все библиотеки. ➖ В долгосрочной перспективе в выигрыше окажутся разработчики, которые делают back-end на том же FastAPI, который может стать еще быстрее. ➖ Удаление GIL также откроет кучу возможностей для разработчиков ИИ (в теории), т.к. это позволит отказаться от вспомогательных языков, таких как C++ и Rust, которые используются для написания столь необходимых библиотек, ускоряющих ввод-вывод и обучение моделей. А что такое GIL и зачем он нам нужен, расскажу позже, уже после релиза долгожданной многими версии 😊
5 месяцев назад