multiprocessing.Process 的日志输出 [英] Log output of multiprocessing.Process

查看:29
本文介绍了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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆