2012-04-02 10 views
0

Ich bin die erste Antwort auf diese Frage mitFreier Speicher in Essig eingelegte Methoden für Multiprocessing

Overcoming Python's limitations regarding instance methods

in der Lage sein Multi-Prozess-Modul über die Methoden eines meiner eigenen Klassen zu verwenden.

Als Beispiel lassen Sie uns sagen, dass ich habe folgendes:

from multiprocessing import Pool 

def myParallelFunc(my_list, a, b, inst): 
    # do something 
    return True 

def myFunc: 
    # instantiate custom class 
    my_instance = MyObject() 

    pool = Pool() 
    pool.map(functools.partial(myParallelFunc, a=5, b=7, inst=my_instance), my_list) 

    # SOLUTION!!! 
    pool.close() 

Jetzt habe ich ein anderes Programm, das die Anrufe 100 mal myFunc lassen sagen. Jedes Mal, wenn ich myFunc anrufe, ist etwas Speicher belegt und wird nie freigegeben. Gibt es eine Möglichkeit, es explizit zu befreien?

+0

Woher weißt du es nie freigegeben wird? Python-Speicherverwaltung sollte die Dinge für Sie erledigen. – Pierce

+0

Ich überwache es mit "top" und es wird erst am Ende freigegeben, wenn das Programm beendet wird –

Antwort

1

Sie erstellen bei jedem Aufruf von myFunc einen neuen Pool. Es wird nicht automatisch gelöscht, wenn myFunc beendet wird, da die untergeordneten Prozesse und zugehörigen Threads verbleiben.

einen Pool erstellen, halten Sie es um für die 100 Anrufe, dann .close es