celery вызывает WorkerShutdown и WorkerLostError при длительном выполнении задачи - PullRequest
0 голосов
/ 26 апреля 2018

Я использую сельдерей для запуска задач, которые прослушивают некоторые веб-соединения и записывают сообщения.Информация об окружающей среде выглядит следующим образом:

software -> celery:4.1.0 (latentcall) kombu:4.1.0 py:3.6.3 billiard:3.5.0.3 
py-amqp:2.2.2 platform -> system:Linux arch:64bit imp:CPython loader -> 
celery.loaders.app.AppLoader settings -> transport:amqp results:disabled

Эти задачи должны всегда выполняться так, как я использовал, когда выполняется истинный цикл в асинхронной функции, чтобы сохранить запись сообщений, отправленных веб-сервером.Однако через несколько часов все задачи с сельдереем прекратились.И я обнаружил, что основной процесс и дочерние процессы моего работника сельдерея все еще выполнялись, но время запуска дочерних процессов было намного новее, чем основной процесс.

PID STARTED ELAPSED COMMAND
15785 Mon Apr 23 03:20:01 2018 2-04:53:38 /home/ubuntu/anaconda3/bin/python /home/ubuntu/anaconda3/bin/celery worker -A data_fetcher --loglevel=info --logfile=log.txt --concurrency=10
18587 Tue Apr 24 08:04:20 2018 1-00:09:19 /home/ubuntu/anaconda3/bin/python /home/ubuntu/anaconda3/bin/celery worker -A data_fetcher --loglevel=info --logfile=log.txt --concurrency=10
18588 Tue Apr 24 08:04:20 2018 1-00:09:19 /home/ubuntu/anaconda3/bin/python /home/ubuntu/anaconda3/bin/celery worker -A data_fetcher --loglevel=info --logfile=log.txt --concurrency=10

Более подробная информация в файле журнала сельдерея (все дочерние процессы):

[2018-04-24 08:04:14,623: ERROR/MainProcess] Process 'ForkPoolWorker-6' pid:15794 exited with 'exitcode 70'
[2018-04-24 08:04:14,633: ERROR/MainProcess] Task handler raised error: WorkerLostError('Worker exited prematurely: exitcode 70.',)
Traceback (most recent call last):
File "/home/ubuntu/anaconda3/lib/python3.6/site-packages/celery/worker/worker.py", line 203, in start
self.blueprint.start(self)
File "/home/ubuntu/anaconda3/lib/python3.6/site-packages/celery/bootsteps.py", line 119, in start
step.start(parent)
File "/home/ubuntu/anaconda3/lib/python3.6/site-packages/celery/bootsteps.py", line 370, in start
return self.obj.start()
File "/home/ubuntu/anaconda3/lib/python3.6/site-packages/celery/worker/consumer/consumer.py", line 320, in start
blueprint.start(self)
File "/home/ubuntu/anaconda3/lib/python3.6/site-packages/celery/bootsteps.py", line 119, in start
step.start(parent)
File "/home/ubuntu/anaconda3/lib/python3.6/site-packages/celery/worker/consumer/consumer.py", line 596, in start
c.loop(*c.loop_args())
File "/home/ubuntu/anaconda3/lib/python3.6/site-packages/celery/worker/loops.py", line 77, in asynloop
raise WorkerShutdown(should_stop)
celery.exceptions.WorkerShutdown: 0

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/ubuntu/anaconda3/lib/python3.6/site-packages/billiard/pool.py", line 1223, in mark_as_worker_lost
human_status(exitcode)),
billiard.exceptions.WorkerLostError: Worker exited prematurely: exitcode 70.

Почему дочерние процессы были закрыты и перезапущены?(и задачи с сельдереем больше никогда не ставились в очередь.) Каков наилучший способ сохранить такие длительные задачи вечно?Любая помощь будет оценена!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...