在多处理过程中抑制输出

问题描述 投票:0回答:1

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

from multiprocessing import Pool

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

p = Pool(10)
p.map(f, [1,2,3])

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

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

python multiprocessing
1个回答
9
投票

使用

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')

打印

Hello
© www.soinside.com 2019 - 2024. All rights reserved.