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

Python 3.14.7: почему сломанный ProcessPool должен давать разные traceback

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

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

Факт, который можно опровергнуть

Начните с вопроса, который можно опровергнуть: «как проверить отдельный BrokenProcessPool для каждого Future в Python 3.14.7». Changelog подтверждает узкую change boundary: ProcessPoolExecutor теперь назначает отдельный BrokenProcessPool каждому pending Future вместо общего экземпляра. Она связана с конкретной болью — После внезапной остановки worker несколько Future разделяли один объект исключения, и каждый result() дописывал к нему traceback, превращая диагностический отчёт в повторяющуюся цепочку. — но не подтверждает частоту встречаемости. Поэтому ниже есть чистый fixture, противоположный control и стоп-линия; без них отсутствие crash или один удачный запуск остаются слабым наблюдением.

Карточка воспроизведения

Запишите карточку опыта T22-05: точная версия, режим запуска, короткий hash входа и действие «в child-runner создать два pending Future и один тестовый worker, который завершится с заранее заданным ненулевым кодом до выполнения задач». Используйте только обратимые ресурсы. До выполнения определите, где появятся stdout, stderr и exit code, а также как будет выполнена очистка. Так диагностический пакет останется повторяемым и не потребует доступа к реальной инфраструктуре.

Control перед выводом

Отрицательный control обязателен: сравнить id исключений, длину traceback и порядок кадров для двух Future, затем повторить весь executor в новом процессе. Заполняйте «future label | exception class | object identity | число кадров | повторяющиеся кадры | worker exit code | executor shutdown» до интерпретации вывода. Если результат зависит от порядка, поменяйте порядок и начните заново с чистого fixture. Не объединяйте несколько исправлений в одном опыте: иначе невозможно связать наблюдение с issue boundary.

Формальное условие приёмки

Формальное условие passed: каждый Future имеет самостоятельный объект BrokenProcessPool и конечный traceback без накопления кадров от чтения соседнего Future. Один позитивный запуск недостаточен — повтор должен сохранить тот же контракт. При расходящихся результатах снизьте вывод до inconclusive и проверьте происхождение бинарника, feature flags и чистоту input. Не повышайте уверенность количеством одинаковых перезапусков одного загрязнённого процесса.

Предел вмешательства

Предел вмешательства: не завершать production worker и не посылать сигналы чужим PID; тест ограничен дочерним executor и deadline. Нельзя расширять тест на production, чужие PID или реальные данные. После target удалите fixture, закройте локальные endpoints и повторите маленький baseline control. Только совпавший baseline доказывает, что эксперимент не оставил состояние.

Сокращённый support bundle

Сокращённый support bundle содержит: версия Python, число Future, безопасный способ завершения тестового worker, таблица identity/frames и финальный shutdown state. Свяжите его с T22-05, добавьте hash синтетического input и критерий «каждый Future имеет самостоятельный объект BrokenProcessPool и конечный traceback без накопления кадров от чтения соседнего Future». Абсолютные пути замените ролями, бинарные данные — hashes, сообщения с приватным контекстом — классами исключений.

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

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

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

Ответы

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

Ваш ответ

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

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

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