Python 3.14.7: проверка общего itertools-итератора в free-threaded режиме. Практическая инструкция отделяет симптом от соседних причин: синтетический fixture, отрицательный control, таблица наблюдений, критерий остановки и минимальный пакет для поддержки без production-данных.
Ответ и предел изменения
Сначала отделите версию от догадки. Для запроса «как проверить безопасную совместную итерацию itertools в free-threaded Python 3.14.7» подтверждено только следующее изменение: Changelog 3.14.7 фиксирует несколько частей gh-123471: concurrent iteration для ряда itertools приведена к безопасному поведению в free-threaded build. Наблюдаемая боль уже: Два потока читают один zip_longest, accumulate, chain или combinations iterator без внешнего lock, и важен не только crash, но также потеря, дубль или нарушение состава результатов. Ни release note, ни наличие issue не доказывают, что именно этот дефект есть в вашем приложении. До любого действия зафиксируйте исходный результат, происхождение Python и одну ожидаемую развилку; обновление окружения само по себе не считается диагностикой.
Изолированный опыт
Для опыта T22-06 подготовьте отдельную среду и выполните: подтвердить Py_GIL_DISABLED, создать один конечный iterator на уникальных метках, два consumer-потока и собрать результаты в отдельные thread-local списки. Перед запуском запишите version/build mode, доступные backend-возможности и deadline. Входы должны быть синтетическими и минимальными; повтор использует вновь созданные объекты, чтобы cache, locale, GUI state, descriptor или предыдущий exception не склеили ветки. Не включайте токены, рабочие письма, архивы, production PID и абсолютные домашние пути.
Отрицательный контроль
Опровергающий сценарий: получить эталон одним потоком на новом iterator, затем выполнить два независимых iterator параллельно и только потом разделить один объект. Ведите строки в формате «оператор itertools | build mode | входной размер | union результатов | дубли | пропуски | исключения | завершение потоков». Порядок A → B → A2 обязателен: A — control, B — целевой case, A2 — новый control после полного пересоздания fixture. Если A2 не совпадает с A, опыт загрязнён и итог нельзя помечать passed. Пустое поле не равно нулю, а сообщение exception не заменяет его класс и фазу.
Критерий решения
Зелёный критерий заранее определён так: общий iterator завершается без crash и hang, а мультимножество результатов совпадает с однопоточным эталоном для выбранного оператора. Всё остальное делится на not reproduced, environment blocked и failed control. Not reproduced означает только отсутствие симптома в этой конфигурации. Environment blocked запрещает вывод о версии. Failed control переводит расследование к fixture или соседней причине. Сравнение 3.14.6 и 3.14.7 допустимо лишь при идентичном входе, лимитах и runtime capabilities.
Стоп и очистка
Стоп-линия для T22-06: не называть обычную сборку free-threaded и не повышать число потоков после сбоя; остановить опыт при отсутствии Py_GIL_DISABLED или превышении deadline. Дополнительные красные флаги — внешний сетевой запрос, запись вне temp root, приватные данные в stdout, неизвестный descendant process и превышение deadline. Не добивайтесь зелёного результата отключением проверок, catch-all обработчиком, бесконечным retry или ростом лимитов. Очистка удаляет только созданные ресурсы и ещё раз проверяет отсутствие живых child/GUI/stub объектов.
Данные для поддержки
Для поддержки достаточно передать: полный sys._is_gil_enabled результат, оператор и конечные входы, хэши отсортированных результатов, число потоков и exit code. Добавьте label T22-06, московский timestamp и точную формулировку критерия «общий iterator завершается без crash и hang, а мультимножество результатов совпадает с однопоточным эталоном для выбранного оператора». Секреты, IP, токены, hostnames и полные environment dumps удалите. Официальные источники подтверждают изменение «Changelog 3.14.7 фиксирует несколько частей gh-123471: concurrent iteration для ряда itertools приведена к безопасному поведению в free-threaded build.», но не подтверждают массовость запроса или готовность конкретного приложения.
Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, даты и ссылки перепроверены. Реальные пользовательские данные не использовались.
Источники и проверка
- Python 3.14.7 release проверено 2026-08-29
- Python 3.14.7 changelog проверено 2026-08-29
- CPython issue #123471 проверено 2026-08-29
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.