У меня следующая ситуация, когда я создаю пул в цикле for следующим образом (я знаю, что это не очень элегантно, но я должен сделать это по причинам травления). Предположим, что pathos.multiprocessing
эквивалентен библиотеке multiprocessing
Python (поскольку это зависит от некоторых деталей, которые не имеют отношения к этой проблеме).
У меня есть следующий код, который я хочу выполнить:
self.pool = pathos.multiprocessing.ProcessingPool(number_processes)
for i in range(5):
all_responses = self.pool.map(wrapper_singlerun, range(self.no_of_restarts))
pool._clear()
Теперь моя проблема: цикл успешно запускает первую итерацию. Однако на второй итерации алгоритм внезапно останавливается (не завершает операцию pool.map
. Я подозревал, что процессы зомби сгенерированы или что процесс каким-то образом switched
. Ниже вы найдете все, что я пробовал до сих пор.
for i in range(5):
pool = pathos.multiprocessing.ProcessingPool(number_processes)
all_responses = self.pool.map(wrapper_singlerun, range(self.no_of_restarts))
pool._clear()
gc.collect()
for p in multiprocessing.active_children():
p.terminate()
gc.collect()
print("We have so many active children: ", multiprocessing.active_children()) # Returns []
Приведенный выше код прекрасно работает на моем Mac. Однако, когда я загружаю его в кластер, который имеет следующие спецификации, я получаю ошибку, которая застревает после первой итерации:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04 LTS"
Это ссылка на файл многопроцессорной библиотеки пафоса '-