#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:
Похоже либо на проблему с памятью, либо на неперехваченное исключение, либо на проблему сложности кода.
- Добавьте несколько журналов «debug», которые вы можете отключить позже
- Вместо одного огромного пула попробуйте вращаться среди пула пулов
- Иногда завершайте работу экземпляра пула, чтобы освободить память
- Запустите несколько профилировщиков
Профилировщики: