Для серверных REST API в Python часто используют Django REST Framework, FastAPI и Flask с соответствующими расширениями. Для клиентских запросов служат другие библиотеки, например HTTPX или requests.
Назовите реальные async-функции и зачем они были нужны: параллельное ожидание HTTP, БД или других I/O. async def само по себе не ускоряет функцию и не запускает её автоматически.
At-least-once допускает повторы и требует идемпотентной обработки. Exactly-once ограничено определённым контуром: транзакция Kafka не делает произвольную запись во внешнюю БД однократной.
GIL в обычном CPython позволяет только одному потоку интерпретатора исполнять Python-код одновременно. Он исторически упрощал защиту внутренних структур и подсчёт ссылок, но ограничивает CPU-параллелизм потоков.
Адаптивный интерпретатор ускоряет часто повторяющиеся динамические операции через специализацию инструкций по наблюдаемым данным. Семантика языка сохраняется: при изменении условий используется общий путь.
id() возвращает целое, неизменное и уникальное для объекта в течение его жизни. В CPython оно связано с адресом объекта; это деталь реализации, а не требование языка.
Назовите языки и уровень владения через реальные задачи: production-разработка, поддержка, учебные проекты или чтение кода. Не стоит ставить одинаковый уровень языку ежедневной работы и редким скриптам.
Да: особенно если C-расширение долго удерживает GIL, не освобождая его. Обычный CPU-bound Python-код в сборке с GIL переключается между потоками, но не даёт им параллельно выполнять байт-код.
PEP 659 описывает адаптивную специализацию отдельных инструкций CPython: часто выполняемые операции получают быстрые варианты под наблюдаемые типы. При нарушении предположений интерпретатор возвращается к общему пути.
Да. Встроенный метакласс type обычно создаёт объекты классов: type(MyClass) возвращает type. Пользовательские метаклассы можно определить наследованием от type.
В обычном Python хвостовые вызовы не устраняют кадры функции: рекурсия накапливает стек и может завершиться RecursionError. Гвидо связывал отказ от такой оптимизации прежде всего с прозрачной отладкой.
cProfile фиксирует события вызовов и возвратов, а sampling-профайлер периодически снимает стеки. Под нагрузкой обычно начинают с короткого sampling-сеанса: он меньше вмешивается, но даёт статистическую оценку.