У меня есть функция foo()
, которая создает несколько объектов. Эта функция вызывается несколько раз во время выполнения моей программы. Чтобы ускорить мой код, я хочу заставить foo()
создать набор процессов, которые вычисляют новые объекты параллельно.
def foo(self):
pool = multiprocessing.Pool()
self.nodes = pool.map(self._create_node, self.args)
pool.close()
pool.join()
def _create_node(self, args):
n = Node(args)
return n
Теоретически это работает, но после нескольких вызовов foo()
мой компьютер зависает. Думаю процессы не убиваются после моего звонка в foo()
, хотя звоню закрываю и присоединяюсь. Что я делаю не так?
Если я убью программу из терминала, я получаю эту ошибку:
->File "threading.py", line 1070, in _wait_for_tstate_lock
elif lock.acquire(block, timeout):
KeyboardInterrupt:
Редактировать
Чтобы добавить еще немного информации, когда я запускаю программу, она изначально работает быстро, но со временем замедляется. По мере торможения программы потребление оперативной памяти возрастает, превышая мою оперативную память и заполняя своп. Без многопроцессорности вы вообще не заметите потребления оперативной памяти, так как программа действительно маленькая. htop
показывает только от 1 до 4 процессов, запущенных одновременно.