Свободная память для многопроцессорных маринованных методов - PullRequest
0 голосов
/ 02 апреля 2012

Я использую первый ответ на этот вопрос

Преодоление ограничений Python в отношении методов экземпляра

чтобы иметь возможность использовать многопроцессорный модуль в методах одного из моих собственных классов.

В качестве примера скажем, что у меня есть следующее:

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

Теперь у меня есть другая программа, которая вызывает myFunc, скажем, 100 раз. Каждый раз, когда я вызываю myFunc, некоторая память занята и никогда не освобождается. Есть ли способ явно освободить его?

1 Ответ

1 голос
/ 02 апреля 2012

Вы создаете новый пул при каждом вызове myFunc.Он не удаляется автоматически при выходе из myFunc, потому что дочерние процессы и связанные потоки остаются.

Создайте пул, сохраните его для этих 100 вызовов, затем. Закройте его

...