1. ホーム
  2. python

multiprocessing.Processのログ出力

2023-08-08 06:11:38

質問

pythonのmultiprocessing.Processクラスを使用しているとき、与えられたProcessからのstdout出力をログに記録する方法はありますか?

どのように解決するのですか?

最も簡単な方法は、単に sys.stdout . の例を少し修正します。 マルチプロセシングマニュアル :

from multiprocessing import Process
import os
import sys

def info(title):
    print title
    print 'module name:', __name__
    print 'parent process:', os.getppid()
    print 'process id:', os.getpid()

def f(name):
    sys.stdout = open(str(os.getpid()) + ".out", "w")
    info('function f')
    print 'hello', name

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    q = Process(target=f, args=('fred',))
    q.start()
    p.join()
    q.join()

そして実行。

$ ls
m.py
$ python m.py
$ ls
27493.out 27494.out m.py
猫27493.out 
関数f
モジュール名: __main__
親プロセス 27492
プロセスID: 27493
hello bob
$ cat 27494.out 
関数f
モジュール名: __main__
親プロセス 27492
プロセスID: 27494
hello fred