2017-09-27 2 views
0

내 코드는 subprocess.Popen 함수를 사용하여 다른 python 스크립트를 실행하는 여러 프로세스를 호출하고 모두 실행을 마칠 때까지 기다립니다. 가끔 (동일한 매개 변수를 사용하더라도 모든 실행이 아님) 하나 이상의 프로세스가 실행되고 있지 않습니다 (호출 된 코드의 첫 번째 것은 이러한 경우 생성되지 않는 로그 파일의 생성입니다).subprocess.Popen은 때때로 0이 아닌 종료 코드를 반환합니다.

for fname1 in input_files_1: 
    cmd_list = create_batch_cmd(fname1) 
    print (' '.join(cmd_list)) 
    p_list.append(Popen(' '.join(cmd_list), shell=True)) 
    logging.info("started process for %s" % fname1) 

logging.info("waiting for processes") 
ps_status = [] 
while True: 
    ps_status = [p.poll() for p in p_list] 
    if all([x is not None for x in ps_status]): 
     break 
logging.info("all processes finished") 
print ps_status 

ps_status는 일반적으로 0 목록입니다.

[0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0] 

무엇이 발생할 수 : 12 개 프로세스의 실행에 는 3 ps_status했다, 실패했을 때? 어떻게 조사 할 수 있습니까? 감사합니다.

+1

while-construct 대신 전체 ps_status = [p_list (p)에 p에 대해 쓸 수 있습니다. – xtofl

답변

0

프로세스 번호 3,8,10이 실패합니다. 다른 모든 프로세스는 정상적으로 작동하고 있기 때문에 파이썬 문제가 아닙니다. poll() 대신 p.wait()를해야 할 수도 있습니다.

+0

감사합니다. 문제는 아마도 내 요청을 처리하는 서버에 있습니다. –

관련 문제