К обсуждениям

Python 3.15 RC1: ContextDecorator остаётся открыт через await

Редакция VOne Технологии

Практическая проверка Python 3.15 RC1: как проверить время жизни ContextDecorator и asynccontextmanager decorator через await или iteration в Python 3.15. Изолированный fixture, отрицательный контроль, заранее заданный критерий и безопасный пакет диагностики.

Создание coroutine не равно её работе

Python 3.15 учит ContextDecorator и AsyncContextDecorator распознавать generator, coroutine и async-generator functions и держать контекст открытым во время iteration или await. Это подтверждает только границу функции, а не наличие проблемы в конкретном проекте. Практический симптом уже: Декоратор входит и выходит при создании coroutine object, а реальная работа после await идёт уже вне transaction, tracing span или lock scope. До изменения кода зафиксируйте версию runtime, способ установки, один ожидаемый результат и один отрицательный исход. RC1 остаётся предварительным выпуском: его проверяют в отдельной среде, не ставят поверх рабочего interpreter и не используют один удачный запуск как разрешение на migration.

Markers вокруг await и yield

Рекомендуемый fixture: сделать asynccontextmanager, пишущий enter/exit markers, декорировать coroutine с marker до и после await Event; отдельно повторить для generator с двумя yield. Дайте ему метку T23-15, отдельный temp root и короткий deadline. Входы должны быть синтетическими, повторяемыми и минимальными; каждый новый запуск получает новые объекты и процесс, если cache или global state способны изменить наблюдение. До опыта запишите точную команду и ожидаемый class результата. Не включайте рабочие конфиги, адреса, токены, персональные строки, production PID или полные environment dumps.

Явный with как эталон

Опровергающий маршрут: сравнить явный async with, decorator path и обычную sync function; порядок событий записывать в список, а не выводить через общий logger. Собирайте строки формата «форма функции | enter index | первый body | await/yield | второй body | exit index | exception path». Порядок control A, target B, fresh control A2 обнаруживает загрязнение fixture: если A2 расходится с A, итог нельзя помечать passed. Пустое поле не равно нулю, отсутствие exception не доказывает правильную семантику, а изменение двух параметров сразу лишает опыт диагностической силы. Соседние причины получают отдельные строки, а не удобное общее объяснение.

Порядок enter-body-exit

Зелёный критерий сформулирован заранее: enter предшествует всей работе, exit следует после последнего await/yield либо exception cleanup, а явный with и decorator дают одинаковую границу. Ветка not reproduced означает только отсутствие симптома в этой версии fixture; blocked означает нехватку capability или источника; failed control возвращает расследование к стенду. Стоп-линия: {item['stop']}. Нельзя добиваться зелёного результата отключением проверки, broad except, ростом лимита, повторением до случайного успеха или подменой предварительного release стабильным обещанием. После теста удаляются только созданные temp-ресурсы.

Не тестируйте на настоящей транзакции

Для maintainer или поддержки подготовьте: минимальный manager, ordered markers, три формы функции, exception class и версия Python без SQL, trace IDs и пользовательских данных. Добавьте label T23-15, московский timestamp, точную версию RC и формулировку критерия «enter предшествует всей работе, exit следует после последнего await/yield либо exception cleanup, а явный with и decorator дают одинаковую границу». Секреты, IP, hostnames, usernames, абсолютные домашние пути и полные логи удалите. Официальные источники подтверждают изменение «Python 3.15 учит ContextDecorator и AsyncContextDecorator распознавать generator, coroutine и async-generator functions и держать контекст открытым во время iteration или await.», но не подтверждают результат вашего теста, частоту проблемы или необходимость менять production. Такой пакет позволяет воспроизвести одну ветку, не раскрывая данные и не смешивая её с соседними issues.

Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, даты и ссылки перепроверены. Реальные пользовательские данные не использовались.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.