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()