1
マルチプロセッシング.Pool(python 2.7.13)を使用して複数のプロセスを生成し、各プロセスのstdout/stderrをファイルにリダイレクトしたい。問題はstdoutでは動作しますが、stderrでは動作しません。ここでは、1つのプロセスの例を示します。 (のMacBookの)マルチプロセッシングを使用するときのstderrのリダイレクト
ターミナルでpython stderr.py
を実行
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()
は正しいメッセージ( "これはa.outのために行かなければならない")とのa.out生成します。しかし、空のa.errが生成され、代わりに端末ウィンドウにエラーメッセージが表示されます。
私がmultiprocessing.Poolを使用せず、メインスレッドで直接実行すると、両方のファイルに正しいメッセージが生成されます。これは、次のコードで()の実行を交換する手段:
def run():
foo()