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

Python 3.14.7: createcommand больше не удерживает удалённый Tcl interpreter

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

Python 3.14.7: createcommand больше не удерживает удалённый Tcl interpreter. Практическая инструкция отделяет симптом от соседних причин: синтетический fixture, отрицательный control, таблица наблюдений, критерий остановки и минимальный пакет для поддержки без production-данных.

Узкая граница исправления

Прямой ответ относится к одной границе: Команда createcommand больше не держит interpreter через reference cycle, если её не удалили до уничтожения interpreter. Практический симптом, который надо отличить от соседних причин: Tcl command, созданная через createcommand, не удалена вручную и удерживает callback вместе с interpreter, поэтому серия коротких GUI-задач постепенно накапливает объекты. Поэтому статья не предлагает угадывать по названию модуля. Она отвечает на намерение «как проверить отсутствие reference cycle после tkinter createcommand и удаления interpreter в Python 3.14.7» через короткий A/B-протокол, где отрицательный control важнее совпавшего текста ошибки. Массовость проблемы и пригодность обновления для конкретного проекта источниками не установлены.

Паспорт наблюдения

Паспорт наблюдения T22-12 начинается не с обновления, а с воспроизводимого шага: в цикле с малым фиксированным числом создать Tcl interpreter, callback с weakref-маркером, createcommand, затем удалить все внешние ссылки и выполнить gc.collect. Запускайте его в temp root, child process, pty, локальном stub или VM — в зависимости от требуемой поверхности. Назначьте лимит времени и ресурсов до старта. Сохраните только измеримые поля, а не полный environment dump; если нужная сборка, display, libc или optional module отсутствует, пометьте environment blocker и не имитируйте результат.

Сравнение без догадки

Не принимайте один удачный case. Выполните независимую ветку: сравнить ветку с явным deletecommand, ветку без createcommand и целевую ветку с неявной очисткой при одинаковом числе циклов. Таблица наблюдений: «ветка | циклы | weakref alive | gc collected | число Tcl commands до destroy | RSS delta как справочная величина». Сравнивайте не впечатление, а тип результата, состав данных и границы времени. Повторите отрицательный control после target-ветки; расхождение говорит о скрытом состоянии, а не об исправлении Python.

Правило зелёной ветки

Решение принимается по правилу: после gc weakref-маркеры освобождены во всех ветках, а целевая ветка не оставляет растущий список interpreter/callback объектов. Не путайте его с «процесс не упал» или «текст ошибки другой». Если target чист, но control не различает две гипотезы, добавьте наблюдение, а не новую статью. Если обновление меняет ещё зависимости, такой прогон не изолирует gh-80937; сначала восстановите одинаковую среду.

Красные флаги

Остановите опыт при первом условии: не делать вывод по одному RSS и не запускать бесконечный цикл; остановиться при незакрытом GUI resource или росте вне заданного допуска. Не продолжайте после crash ради «ещё одного подтверждения». Верните среду к baseline: закройте socket/pty, уничтожьте root, завершите только созданный child, удалите temp fixture и проверьте resource inventory. Если rollback нельзя доказать, материал остаётся кандидатом и не должен публиковаться как прошедший проверку.

Минимальный тикет

Минимальный тикет состоит из: версия Python/Tk, число циклов, weakref counts до/после gc, наличие explicit cleanup в control и агрегированный RSS без dump памяти. Отдельно приложите строки control/target/repeat и отметьте, на какой фазе возникло отклонение. Не присылайте реальные payload, credential или полный crash dump. Такой пакет позволяет воспроизвести границу gh-80937 без доступа к вашей инфраструктуре.

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

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

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

Ответы

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

Ваш ответ

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

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

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