在多进程中抑制输出

3

我有一些使用multiprocessing 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放入某个变量中?感谢任何建议。

编辑: 我不想重定向整个stdout,只是针对我的进程池进行操作。


可能是将stdout重定向到Python文件中?的重复问题。 - Ami Tavory
这个怎么样?它建议使用上下文管理器。链接:https://dev59.com/AHE85IYBdhLWcg3wVR-g#2829036 - Dave J
它不起作用,我认为问题在于产生了多个独立的进程。 - jrsm
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接