日志输出multiprocessing.Process

发布于 2021-01-29 19:37:13

在python中使用multiprocessing.Process类时,是否有办法记录给定Process的stdout输出?

关注者
0
被浏览
165
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    最简单的方法可能是覆盖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
    $ 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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看