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 № 1Benutzen 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