1
我想使用multiprocessing.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
在(的的MacBook)端产生的a.out与正确的消息( “这必须去A.OUT”)。但它会产生空的a.err,而错误信息会出现在终端窗口中。
如果我不使用multiprocessing.Pool并直接在主线程中运行它,它会在两个文件上生成正确的消息。这意味着与下面的代码段取代的run():
def run():
foo()