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?

War es hilfreich?

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
scroll top