2012-04-10 2 views
2

웹 서비스 요청 작업 영역을보고있는 Python 스크립트가 있습니다. 클라이언트가 웹 서비스에 작업을 제출할 때마다 고유 한 작업 폴더가 잘 알려진 위치에 생성됩니다. "플래그"(이 작업에서 처리가 완료되었음을 나타내는 특정 이름의 빈 텍스트 파일)이없는 폴더에 대해이 잘 알려진 위치를 폴링하는 스크립트가 있습니다.다중 인스턴스로 마스터 스크립트에서 python 작업자 스크립트 호출

지금 내 스크립트는 새 폴더의 내용을 처리하기 위해 작업자 스크립트를 호출 할 수 있지만 작업자 스크립트가 끝날 때까지 기다려야 폴더를 전달할 수 있습니다.

제 질문은 worker 스크립트의 새로운 인스턴스를 시작하여 관리자에게 제어권을 반환하는 옵션입니다. 작업자 스크립트의 매개 변수를 사용하는 Python 실행 파일을 만들고 관리자 스크립트가 명령 행 작업을 통해 호출하도록할까요? 또는 여러 작업을 처리 할 수있는 클래스로 작업자 스크립트를 만들 수 있습니까?

일단 작업자 스크립트가 완료되면 관리자 스크립트 작업 완료 메시지를 다시 보낼 필요가 없습니다. 이것은 텍스트 파일을 디렉토리에 놓음으로써 가능합니다. 이제는 생각해 보았지만 작업자 스크립트를 처리하는 데 1.5 분이 걸리기 때문에 각 작업 디렉토리가 배포되어 있어야합니다.

모든 조언/링크를 보내 주시면 감사하겠습니다.

답변

0

먼저 디렉토리에 이라는 메시지가이라는 플래그가 있어야한다는 데 동의합니다. 마스터 스크립트는 플래그를 설정할 수있는 유일한 스크립트 여야합니다. 그렇지 않으면 경쟁 조건이 발생할 위험이 있습니다 (동일한 디렉토리를 동시에 사용하는 두 개의 작업자 스크립트). 동일한 파일을 사용할 수 있습니다. 마스터 스크립트는 빈 상태 ("진행중"을 의미)로 작성하고 작업자 스크립트는 1B (즉, "완료 됨")를 씁니다. 그런 식으로 마스터 스크립트는 플래그의 존재 여부 만 확인하면됩니다. 위로 질문에

:

  • 당신이 참으로 독립 실행 형 프로그램으로 작업자 스크립트를 확인하고 subprocess 모듈을 통해 호출 할 수 있습니다;

  • 모듈 [2] 포함) 코드를 작성하는 것이 더 쉬운 스레드로 만들 수 있습니다. GIL, 때문에 비효율적 일 수 있지만 작업자 스크립트의 IO 바인딩이 높으면 문제가 너무 많아서는 안됩니다.

  • 파이썬 3를 사용하는 경우, 당신은 multiprocessing 모듈을보고 할 수 있습니다 [3] 내가 사용하지 않는하지만 GIL에 취약 을하지 않고 스레딩의 유용성을 혼합 것으로 보인다 결코
    ; 그것은 완전히 휴대용이 아닌 것 같습니다.

희망이 도움

  • [1] http://docs.python.org/library/subprocess.html
  • [2] http://docs.python.org/library/threading.html
  • [3] http://docs.python.org/dev/library/multiprocessing.html
관련 문제