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

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

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

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

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

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

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

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

1 Ответ

4 голосов
/ 08 мая 2011

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

  1. Попробуйте передать вывод скрипта в: | tee out.txt Если это не имеет никакого эффекта, попробуйте ...
  2. Запустить экран на другом хосте. Оттуда SSH в ваш рабочий хост. Запустите ваш скрипт в неэмулированной оболочке. Тогда не стесняйтесь отключиться и снова подключиться с вашего прыжка, чтобы проверить процесс. Это должно скрывать от работника, что экран в любом случае задействован.

Пожалуйста, прокомментируйте результаты этих тестов. Это даст мне больше информации.

...