2012-04-02 5 views
0

j'utilise la première réponse à cette questionmémoire pour multitraitement méthodes marinées

Overcoming Python's limitations regarding instance methods

pour pouvoir utiliser le module multiprocessus sur les méthodes d'un de mes propres classes.

À titre d'exemple, disons que je donne les résultats suivants:

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

Maintenant, j'ai un autre programme qui appelle myFunc disons 100 fois. Chaque fois que j'appelle myFunc, la mémoire est occupée et jamais libérée. Existe-t-il un moyen de le libérer explicitement?

+0

Comment savez-vous qu'il n'a jamais libéré? La gestion de la mémoire Python devrait prendre soin des choses pour vous. – Pierce

+0

Je le surveille avec "top" et il n'est publié qu'à la fin, quand le programme se termine –

Répondre

1

Vous créez un nouveau pool à chaque appel de myFunc. Il n'est pas supprimé automatiquement lorsque myFunc se ferme, car les processus fils et les threads associés restent.

Créer une piscine, gardez-le autour de ces 100 appels, puis .close il