Пул многопроцессорности Python висит на сервере ubuntu

Я запускаю Django на сервере Ubuntu с nginx и gunicorn. Я пытаюсь выполнить некоторую многопроцессорную обработку, которая работает на моей локальной машине, но висит до тех пор, пока на моем сервере не истечет срок действия артиллериста.

cpu_count = int(multiprocessing.cpu_count())
pool = Pool(processes = cpu_count)
result = pool.map_async(apiSimulAvail, rate_ranges)
result.wait()

...do some more stuff once all processes return

Он зависает при pool = Pool(processes = cpu_count). Я не получаю никаких ошибок, рабочий-артиллерист просто отключается и перезагружается.

Любое указание на то, почему это происходит и/или как я могу его решить, очень ценится. Спасибо.

Ответ 1

Это, по-видимому, вариация на Использование многопроцессорной обработки python делает ответ зависанием на пушку, так что, возможно, это обман.

Тем не менее, вам нужно использовать многопроцессорность (MP)? Вы, честно говоря, могли бы лучше справляться с этим, как с сельдереем. Депутат может быть убит рабочим-оружейником, когда он умрет, так как он владеет процессом МП. В зависимости от конфигурации сервера это может произойти довольно часто. Если у вас есть очень длинная работа, вы все равно можете использовать ее для сельдерея, это немного больше конфигурации.

Ответ 2

Используете ли вы какого-то асинхронного рабочего Gunicorn? Если это так, попробуйте работу с синхронизатором по умолчанию и посмотрите, можете ли вы воспроизвести проблему.

Если проблема может быть воспроизведена только при использовании асинхронных рабочих, вы должны убедиться, что модуль multiprocessing исправлен правильно.

Ответ 3

Измените

pool = Pool(processes = cpu_count)

к

pool = Pool(cpu_count)

Это предполагает, что вы импортировали пул из многопроцессорности, иначе вам нужно будет

multiprocessing.Pool(cpu_count)