【发布时间】:2017-09-22 18:08:43
【问题描述】:
我想使用 multiprocessing.Pool (python 2.7.13) 生成多个进程,并将每个进程的 stdout / stderr 重定向到一个文件。问题是它适用于标准输出,但不适用于标准错误。这是一个使用单个进程的示例。
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()
在终端(macbook)中运行 python stderr.py 会产生带有正确消息的 a.out(“这必须转到 a.out”)。但它会产生空的 a.err,并且错误消息会出现在终端窗口中。
如果我不使用 multiprocessing.Pool 并直接在主线程中运行它,它会在两个文件上生成正确的消息。这意味着用以下 sn-p 替换 run():
def run():
foo()
【问题讨论】:
标签: python-2.7 python-multiprocessing