Как под капотом устроены расширения на C/C++ для Python (C Extensions)? Почему расширения, написанные с использованием традиционного Python C API, замедляют переход на No-GIL Python, и как современные альтернативы вроде HPy или Cython решают эту проблему?

C-расширение — нативный модуль, работающий с объектами Python через C API. Старый код часто полагается на GIL как защиту общего состояния, поэтому отключение GIL требует аудита и синхронизации.

Короткий ответ

Что ответить на собеседовании

C-расширение — нативный модуль, работающий с объектами Python через C API. Старый код часто полагается на GIL как защиту общего состояния, поэтому отключение GIL требует аудита и синхронизации.

Подробный разбор

Ответ с пояснениями

C-расширение — нативный модуль, работающий с объектами Python через C API. Старый код часто полагается на GIL как защиту общего состояния, поэтому отключение GIL требует аудита и синхронизации.

Опасны глобальные кеши, прямой доступ к изменяемым структурам и borrowed references при конкурентном удалении объектов. Поддержку free-threading нужно явно объявить; несовместимое расширение может снова включить GIL. HPy скрывает внутреннее представление объектов за handles, уменьшая зависимость от деталей CPython, но не исправляет все гонки автоматически. Cython помогает генерировать совместимый код и предоставляет средства синхронизации; директива совместимости — обещание автора, а не проверка безопасности. Нужны отдельные сборки, тесты и проверка нативных зависимостей.

Источник: docs.python.org, hpyproject.org, docs.cython.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее