multiprocessing.Process 的日志输出 [英] Log output of multiprocessing.Process
本文介绍了multiprocessing.Process 的日志输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在 python 中使用 multiprocessing.Process 类时,有没有办法记录给定进程的 stdout 输出?
解决方案
最简单的方法可能是覆盖 sys.stdout
.稍微修改多处理手册中的示例:
from multiprocessing import Process导入操作系统导入系统定义信息(标题):印刷标题打印 '模块名称:', __name__打印 '父进程:', os.getppid()打印 '进程 id:', os.getpid()定义 f(名称):sys.stdout = open(str(os.getpid()) + ".out", "w")信息('函数f')打印你好",名字如果 __name__ == '__main__':p = Process(target=f, args=('bob',))p.start()q = Process(target=f, args=('fred',))q.start()p.join()q.join()
并运行它:
<前>$lsm.py$蟒蛇m.py$ls27493.out 27494.out m.py$ 猫 27493.out函数 f模块名称:__main__父进程:27492进程 ID:27493你好鲍勃$ 猫 27494.out函数 f模块名称:__main__父进程:27492进程 ID:27494你好弗雷德Is there a way to log the stdout output from a given Process when using the multiprocessing.Process class in python?
解决方案
The easiest way might be to just override sys.stdout
. Slightly modifying an example from the multiprocessing manual:
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()
And running it:
$ ls m.py $ python m.py $ ls 27493.out 27494.out m.py $ cat 27493.out function f module name: __main__ parent process: 27492 process id: 27493 hello bob $ cat 27494.out function f module name: __main__ parent process: 27492 process id: 27494 hello fred
这篇关于multiprocessing.Process 的日志输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文