8

다중 처리 및 하위 프로세스를 사용하여 다른 인수와 함께 여러 외부 명령을 실행하는 Python 스크립트가 있습니다. 코드는 here입니다.GNU 화면 내의 Python은 화면이 꺼내지면 결국 유휴 상태가됩니다.

편의상이 스크립트는 GNU Screen 세션에서 실행됩니다. 이 스크립트가 실행중인 시스템에는 프로세스가 활성화 될 때까지 유휴 상태 인 12 개의 프로세서가 있습니다.

각 프로세스는 실행하는 데 몇 시간에서 며칠이 걸리기 때문에 종종 시스템과의 연결을 끊고 화면 세션을 분리합니다.

그러나 최근에 나는 결코 전에 경험하지 못한 행동을 발견했습니다. 여러 번 기계를 돌려서 부하가 0 인 유휴 상태인지 확인했습니다. ps ux 또는 top을 통해 활성 프로세스 목록을 얻으면 여전히 프로세스 목록에서 스크립트 (및 하위 프로세스)를 찾을 수 있습니다. 그런 다음 화면 세션을 다시 연결하여 프로그램 상태를 확인하고 즉시 새 프로세스 배치를 대기열로 보내고 시스템로드가 몇 초 만에 12로 돌아갑니다. 스크린 세션을 다시 연결하는 것 이외에는 스크립트에 아무 것도하지 않았습니다.

시스템에 모니터링 도구를 설치했는데 특정 시간이 지나면 일부 프로세스가 끝나고 새로운 프로세스가 시작되지 않습니다. 따라서 시스템은 하위 프로세스가 사용 중이며 대기열에서 더 이상 작업이 해제되지 않는 즉시 대기 상태가 될 때까지 활성화됩니다.

그럼 내 질문은, 누구든지이 동작을 설명하는 이유를 알고 있습니까?

EDIT : 1 년 정도 지나면이 문제는 더 이상 재현 할 수 없으며 화면에 일부 패치 나 파이썬 자체가 없습니다. 나는 그것이 시험을위한 좋은 지침을 제공 할 때 대답을 받아들입니다.

+0

문제점이 발생했을 때 사용하고있는 파이썬 및 화면의 버전을 알 수 있습니까? 그리고 이제는 문제가 더 이상 발생하지 않는 버전을 알려주십시오. 나는 나 자신과 매우 비슷한 문제를 겪고있다. – SpoonMeiser

+0

죄송합니다 SpoonMeiser, 문제가 너무 오래 전 그 정보가 더 이상 없었어요. 그때부터 나는 화면 대신 tmux를 사용하기 시작했다. 해결 방법은 stdout/stderr에 인쇄하는 대신 파일 로깅을 사용했습니다. – Unode

답변

4

나는 당신이보고있는 이유를 설명 할 수 없다. 그러나 다음에 시도 할 수있는 것에 대한 아이디어가 있습니다.

  1. 스크립트 출력을 파이핑하여 다음과 같이하십시오. tee out.txt 효과가 없다면 ...
  2. 다른 [hop] 호스트에서 화면을 실행하십시오. 작업자 호스트에 SSH가 있습니다. 에뮬레이트되지 않은 쉘에서 스크립트를 실행하십시오. 그런 다음 연결을 끊고 다시 연결하여 프로세스를 확인하십시오. 이것은 화면이 어쨌든 관련되어 있다는 것을 작업자에게 숨겨야합니다.

이 테스트 결과에 대해 다시 의견을 말하십시오. 그것은 저에게 계속 나아갈 것입니다.

+0

스크립트를 중지하고 싶지 않기 때문에 2 단계에서 설명한 내용을 정확하게 실행하지 못했습니다. 대신 나는 홉 호스트에서 스크린을 시작했고, 서버에 ssh'ed되었고 그 안에 서버의 스크린을 부착했다. 그런 다음 홉 스크린을 분리하여 서버 하나를 안에 둡니다. – Unode

+0

오, 잘 부탁드립니다. 나는 그것을 좋아한다! 행운을 빕니다. –

+0

모든 계산이 완료되면 2 화면 접근 방식으로 인해 문제가 추가로 발생하지 않습니다. 그러나 나는 아직도 그 이유를 이해하지 못한다. 그러므로 나는 사람들이 무슨 일이 일어 났는지 설명 할 수있는 더 많은 가능성을 열거 해 주길 바란다.어쨌든 +1은 해결 방법입니다. – Unode

관련 문제