在多处理过程中抑制输出

jrs*_*rsm 2 python multiprocessing

我有一些使用多处理 Pool 类并行运行的代码。不幸的是,我从另一个库中使用的一些函数有一些冗长的输出。要抽象问题,请查看以下示例:

from multiprocessing import Pool

def f(x):
    print 'hello'
    return x*x

p = Pool(10)
p.map(f, [1,2,3])
Run Code Online (Sandbox Code Playgroud)

所以这将打印 'hello' 10 次。是否有可能使进程的输出静音或将 std.out 放在某个变量中?感谢您的任何建议。

编辑:我不想重定向整个标准输出,只是为了我的池进程。

unu*_*tbu 7

使用initializer参数来调用mute的工作进程:

import sys
import os
from multiprocessing import Pool

def mute():
    sys.stdout = open(os.devnull, 'w')    

def f(x):
    print 'hello'
    return x*x

if __name__ == '__main__':
    p = Pool(10, initializer=mute)
    p.map(f, [1,2,3])
    print('Hello')
Run Code Online (Sandbox Code Playgroud)

印刷

Hello
Run Code Online (Sandbox Code Playgroud)