2008-12-14 6 views
13

Python 다중 처리 모듈에 문제가 있습니다. 내 두 번째 코어를 활용하기 위해 Process 클래스를 사용하여 새 프로세스를 생성합니다. 이 두 번째 프로세스는 많은 양의 데이터를 RAM에로드 한 다음 소비하는 대신 끈기있게 기다립니다.자식 다중 처리에서 인쇄물이 출력되지 않습니다. 프로그램이 충돌하지 않는 한 프로세스

나는이 프로세스가 print 명령으로 인쇄 된 것을보고 싶었지만 인쇄하는 내용이 보이지 않았습니다. 부모 프로세스가 인쇄하는 내용 만 볼 수 있습니다. 이제 그들은 서로 다른 두 가지 과정을 거치면서 나에게 의미가 있습니다. 두 번째 프로세스는 자체 셸/표준 출력 창을 생성하지 않으며 해당 출력을 부모에게 보내지 않습니다. 그러나이 프로세스가 중단되면 스크립트에서 인쇄하도록 지시 한 모든 내용과 스택 추적 및 오류를 인쇄합니다.

자식 프로세스의 인쇄 출력을 첫 번째 프로세스로 보내거나 쉘/표준 출력을 생성하여 디버깅 할 수있는 간단한 방법이 있는지 궁금합니다. 나는 이것들을 표준 출력으로 출력 할 수 있도록 부모에게 인쇄물을 전송하는 것을 전담하는 multiprocessing.Queue을 만들 수 있다는 것을 알고 있지만, 더 간단한 해결책이 존재한다면 이것을하는 것처럼 느껴지지 않습니다.

답변

23

표준 출력을 플러시 했습니까?

import sys 
print "foo" 
sys.stdout.flush() 
+0

awesome! 그래, 그게 정말 효과가 있었어. 이 sys.stdout.flush()는 무엇을합니까? 명시 적으로 인쇄물을 표준 출력으로 강제 설정합니까? 다시 Thx! –

+1

버퍼를 지 웁니다. Stdout은 버퍼가 가득 찰 때까지 저장됩니다. 플러시 대기가 중지됩니다. 그것이 무엇인지보기 위해 stderr에 인쇄 해보십시오. 때로는 버퍼링되지 않습니다. –

+0

@Nicholas : 문제 없음 :) 하위 프로세스를 실행할 때 표준 출력은 대개 버퍼링됩니다 (일반적으로 표준 오류는 아닙니다). S.Lott은 이것이 의미하는 바를 설명했습니다. 다른 트릭을 사용하여 버퍼링을 방지 할 수 있지만 sys.stdout.flush()를 사용하는 것을 기억하면 간단하며 항상 작동합니다. – orip

관련 문제