2017-09-29 10 views
0

여기에 수십 개의 "Python 하위 프로세스 정지"기사를 읽었으며 아래 코드의 여러 기사에있는 모든 문제를 해결했다고 생각합니다.출력 파이핑시 Python 하위 프로세스가 Popen으로 중단됩니다.

간헐적으로 Popen 명령에 내 코드가 멈 춥니 다. multiprocessing.dummy.apply_async를 사용하여 4 개의 스레드를 실행 중이며 각 스레드는 서브 프로세스를 시작한 다음 출력을 한 줄씩 읽고 stdout에 수정 된 버전을 인쇄합니다.

def my_subproc(): 
    exec_command = ['stdbuf', '-i0', '-o0', '-e0', 
        sys.executable, '-u', 
        os.path.dirname(os.path.realpath(__file__)) + '/myscript.py'] 

    proc = subprocess.Popen(exec_command, env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=1) 
    print "DEBUG1", device 

    for line in iter(proc.stdout.readline, b''): 
    with print_lock: 
     for l in textwrap.wrap(line.rstrip(), LINE_WRAP_DEFAULT): 

위 apply_async에서 실행되는 코드 :

pool = multiprocessing.dummy.Pool(4) 
for i in range(0,4): 
    pool.apply_async(my_subproc) 

가 간헐적으로 하위 프로세스가 subprocess.Popen에서 중단됩니다는 문 "DEBUG1"는 인쇄되지 않습니다. 때로는 모든 스레드가 작동하며 때로는 4 개 중 1 개만 작동합니다.

Popen에 대해 알려진 교착 상태가 있음을 알 수 없습니다. 내가 잘못?

답변

0

이것은 다중 처리와 관련된 잘못된 상호 작용 인 것으로 보입니다. 다중 처리 (.dummy 스레딩 인터페이스가 아님)를 사용할 때 오류를 재현 할 수 없습니다.