1
다중 처리 .Pool (python 2.7.13)을 사용하여 여러 프로세스를 생성하고 각 프로세스의 stdout/stderr을 파일로 리디렉션합니다. 문제는 stdout에서는 작동하지만 stderr에서는 작동하지 않습니다. 다음은 단일 프로세스를 사용한 예입니다. (맥북의) 단자에다중 처리를 사용할 때 stderr 리디렉션 .Pool
import sys
import multiprocessing as mp
def foo():
sys.stdout = open('a.out','w')
sys.stderr = open('a.err', 'w')
print("this must go to a.out.")
raise Exception('this must go to a.err.')
return True
def run():
pool = mp.Pool(4)
_retvals = []
_retvals.append(pool.apply_async(foo))
retvals = [r.get(timeout=10.) for r in _retvals]
if __name__ == '__main__':
run()
실행 python stderr.py
는 ("이 이는 a.out로 이동해야한다") 올바른 메시지와 함께 a.out을 생산하고 있습니다. 그러나 빈 a.err을 생성하고 터미널 창에 오류 메시지가 나타납니다.
다중 처리 .Pool을 사용하지 않고 주 스레드에서 직접 실행하면 두 파일 모두에서 올바른 메시지가 생성됩니다. 이것은 다음 코드로() 실행을 대체하는 의미
def run():
foo()