Многопроцессорная обработка Python с пулом, выполняющим только 400 заданий из 2000 и останавливающимся

#python #python-multiprocessing #pool

#python #python-многопроцессорный #Бассейн

Вопрос:

Я хочу запустить модуль кода для 2000 отдельных данных. Для этого я использовал следующий код Python

 num_workers = multiprocessing.cpu_count() 
pool = multiprocessing.Pool(processes=num_workers)
print 
results = [pool.apply_async(run_Nested_Cage, args=(bodyid,)) for bodyid in body_IDs]
output = [p.get() for p in results]
  

Он работает нормально для 50 данных в body_IDs, но когда я предоставляю 2000 тел, он начинает работать нормально, но после генерации результатов для 424 тел программа останавливается без каких-либо ошибок.

Я запускаю его на сервере AWS EC2 Linux Ubuntu с 8-ядерным ОЗУ объемом 32 ГБ и хранилищем объемом 100 ГБ.

Кто-нибудь может помочь мне определить решение?

Комментарии:

1. Вы посмотрели на ресурс, выделенный для каждого процесса? Наиболее очевидным ответом было бы то, что у него закончилась оперативная память… хотя должна возникать ошибка памяти. Я говорю, что, поскольку, если он работает в течение 50, он должен работать и дольше, за исключением случаев, когда объекты остаются в памяти и в конце концов насыщают ее.

Ответ №1:

Похоже либо на проблему с памятью, либо на неперехваченное исключение, либо на проблему сложности кода.

  1. Добавьте несколько журналов «debug», которые вы можете отключить позже
  2. Вместо одного огромного пула попробуйте вращаться среди пула пулов
  3. Иногда завершайте работу экземпляра пула, чтобы освободить память
  4. Запустите несколько профилировщиков

Профилировщики: