Python внутри GNU Screen в конечном итоге становится бездействующим, если Screen отключен

У меня есть сценарий python, который использует многопроцессорность и подпроцесс для запуска нескольких внешних команд параллельно с разными аргументами. Код можно найти здесь .

Для удобства я запускаю этот сценарий в сеансе GNU Screen. Машина, на которой выполняется этот сценарий, имеет 12 процессоров, которые простаивают до тех пор, пока процессы не станут активными.

На выполнение каждого из процессов уходит от нескольких часов до пары дней, поэтому я часто отключаюсь от машины и отключаю сеанс экрана.

Однако недавно я заметил поведение, которого никогда раньше не испытывал. Несколько раз я возвращался к машине и обнаруживал, что она простаивает с нулевой нагрузкой. Если я получу список активных процессов через ps ux или top , я все равно смогу найти сценарий (и подпроцессы) в списке процессов. Я тогда повторно подключите сеанс экрана, чтобы проверить состояние программы, и сразу же новый пакет процессов будет отправлен в очередь, а загрузка системы вернется к 12 за считанные секунды. Обратите внимание, что я ничего не сделал со сценарием, кроме повторного подключения сеанса экрана.

Я установил в систему инструмент мониторинга, и в результате некоторые процессы завершаются через определенное время, а новые процессы не запускаются. Таким образом, система активна до тех пор, пока подпроцессы не будут заняты, и переходит в режим ожидания, как только из очереди больше не освобождаются задания.

Итак, мой вопрос: знает ли кто-нибудь причину, объясняющую такое поведение?

РЕДАКТИРОВАТЬ : Примерно через год эта проблема больше не воспроизводится, ни какой-то патч на экране, ни сам питон. Я принимаю ответ, так как он дал хорошие указания для тестирования.

9
задан unode 10 December 2012 в 03:55
поделиться