Profilieren einer Python Multiprocessing-Pool
-
06-07-2019 - |
Frage
Ich versuche cProfile.runctx () auf jedem Prozess in einem Multiprozessor-Pool zu laufen, eine Vorstellung davon zu bekommen, was die Multiprocessing-Engpaß sind in meiner Hand. Hier ist ein vereinfachtes Beispiel dafür, was ich versuche zu tun:
from multiprocessing import Pool
import cProfile
def square(i):
return i*i
def square_wrapper(i):
cProfile.runctx("result = square(i)",
globals(), locals(), "file_"+str(i))
# NameError happens here - 'result' is not defined.
return result
if __name__ == "__main__":
pool = Pool(8)
results = pool.map_async(square_wrapper, range(15)).get(99999)
print results
Leider versuchen „result = square (i)“ im Profiler auszuführen hat keine Auswirkungen auf ‚Ergebnis‘ im Rahmen aus aufgerufen wurde. Wie kann ich erreichen, was ich versuche, hier zu tun?
Lösung
Versuchen Sie folgendes:
def square_wrapper(i):
result = [None]
cProfile.runctx("result[0] = square(i)", globals(), locals(), "file_%d" % i)
return result[0]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow