/ / Ausgabe im Multiprocessing-Prozess unterdrücken - Python, Multiprocessing

Ausgabe im Multiprocessing-Prozess unterdrücken - Python, Multiprocessing

Ich habe einen Code, der parallel läuftMultiprocessing-Pool-Klasse. Leider haben einige Funktionen, die ich aus einer anderen Bibliothek verwende, einige ausführliche Ausgaben. Um das Problem zu lösen, sehen Sie sich das folgende Beispiel an:

from multiprocessing import Pool

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

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

Also wird das "Hallo" wie 10 Mal gedruckt. Gibt es eine Möglichkeit die Ausgabe der Prozesse stummzuschalten oder std.out in eine Variable setzen? Vielen Dank für jeden Vorschlag.

BEARBEITEN: Ich möchte nicht den ganzen Standard umleiten, nur für die Prozesse meines Pools.

Antworten:

4 für die Antwort № 1

Benutzen das initializer Parameter anrufen mute in den Arbeitsprozessen:

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

Drucke

Hello