2014-11-18 7 views
1

문제 해결에 도움을 받고 싶습니다.어떻게 파이썬은 배치 SGE 스크립트가 실행을 마칠 때까지 기다릴 수 있습니까?

는 파이썬에서 일하고 난 다음을 수행 할 :

  • 호출 뭔가를 할 올바르게
  • 작동하는 경우
  • 보고 서버에 SGE 배치 스크립트

지금 내가하는 일은 대략 다음과 같습니다.

import subprocess 
    try: 
     tmp = subprocess.call(qsub ....) 
     if tmp != 0: 
      error_handler_1() 
     else: 
      correct_routine() 
    except: 
     error_handler_2() 

내 문제는 일단 스크립트가 SGE로 보내지면 내 파이썬 스크립트가 성공으로 해석하고 마치 마치 마치 계속 작동한다는 것입니다.

파이썬 코드가 SGE 스크립트의 실제 처리 결과를 기다릴 수있는 방법에 대한 제안이 있습니까?

아, BTW 나는 qrsh를 사용하여 시도하지만 난 SGE에

감사를 사용할 수있는 권한이 없습니다!

+0

완료 시점은 어떻게 알 수 있습니까? – stark

+0

qstat 명령을 살펴 보거나 -m abe -M mymail을 통해 전자 메일 알림을받을 수 있습니다. –

답변

2

코드에서 프로그램이 작업이 끝나고 코드를 반환 할 때까지 기다리고 싶습니다. 그래서, qsub를 동기화 옵션을 가능성이 있다면 당신이 원하는 무엇을 : 쉽게 처리

http://gridscheduler.sourceforge.net/htmlman/htmlman1/qsub.html

+0

Thanks Vince,이 솔루션은 실행이 중지 될 때까지 대기합니다. –

1

추가 답변 : 를 파이썬 drmaa 모듈을 사용하여 : link SGE와 함께보다 완벽한 처리를 할 수 있습니다. 설명서에 제공된 기능 코드는 다음과 같습니다. [sleeper.sh 스크립트를 동일한 디렉토리에 두었 으면] .sh 스크립트를 실행하려면 -bn 옵션이 필요합니다. 그렇지 않으면 바이너리가 기본값은 다음과 같습니다. here

import drmaa 
import os 

def main(): 
    """Submit a job. 
    Note, need file called sleeper.sh in current directory. 
    """ 
    s = drmaa.Session() 
    s.initialize() 
    print 'Creating job template' 
    jt = s.createJobTemplate() 
    jt.remoteCommand = os.getcwd()+'/sleeper.sh' 
    jt.args = ['42','Simon says:'] 
    jt.joinFiles=False 
    jt.nativeSpecification ="-m abe -M mymail -q so-el6 -b n" 
    jobid = s.runJob(jt) 
    print 'Your job has been submitted with id ' + jobid 
    retval = s.wait(jobid, drmaa.Session.TIMEOUT_WAIT_FOREVER) 
    print('Job: {0} finished with status {1}'.format(retval.jobId, retval.hasExited)) 
    print 'Cleaning up' 
    s.deleteJobTemplate(jt) 
    s.exit() 

if __name__=='__main__': 
    main() 
+0

나는 drmaa setup을 with 문에 두어 파이썬이 자동으로 생성 된 리소스를 해제 할 것을 권한다. https://drmaa-python.readthedocs.io/en/latest/tutorials.html#running-a-job – sk8asd123