Русский
Открыть в Telegram

ПостПочему subprocess с PIPE может зависнуть

15 октября 2026
Z
Zen of Python
Фотография
нажмите — покажем
Почему subprocess с PIPE может зависнуть Дочерний процесс пишет в stdout, родитель вызывает wait(). На небольшом выводе всё работает. На большом буфер канала заполняется: ребёнок ждёт чтения, родитель — завершения ребёнка. В разборе взаимной блокировки показано, почему каналы нужно читать во время работы процесса. Для ограниченного вывода удобен run(): import subprocess result = subprocess.run( ["python", "--version"], capture_output=True, text=True, timeout=10, check=True, ) Он использует communicate(), который обслуживает оба потока. Вывод при этом собирается в памяти, поэтому для больших логов выбирайте файл или потоковое чтение. У Popen.communicate(timeout=...) другая тонкость: истечение тайм-аута само не убивает процесс. Нужны завершение процесса и повторный communicate() для чтения остатка вывода. #python #процессы
⚡1
9 · 957 ·

Рядом в ленте

ZZen of PythonПочему тест проходит отдельно и падает в наборе Один тест добавляет объект в общий список, другой рассчитывает, что список пуст. При привычном порядке запуска оZZen of PythonКак запустить тесты самого Django через uv Хотите исправить баг в Django? Сначала понадобится окружение для тестов фреймворка. Установки Django из PyPI для этог
это сообщение
ZZen of PythonЧто проверить перед переходом на SQLAlchemy 2.1 Обновление зависимости может поменять драйвер подключения, даже если строка подключения осталась прежней. В SQLAZZen of PythonPython обработал 7,6 ГБ JSON за 0,12 секунды Здесь интересно, куда уходило время. Дэниел Лемир, исследователь производительности, взял 2,2 млн событий GitHub, ч

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем