Сельдерей умирает после случайного времени с IronMQ

Запуск Django 1.4.10, Celery 3.1.7, Python 2.7, Kombu 3.0.12 и использование супервизора django для запуска и работника сельдерея, и удара сельдерея в качестве демона. Использование IronMQ в качестве брокера.

Все работает отлично, обрабатывая периодические задачи в течение нескольких дней, и вдруг работник просто погибает смертельно:

[2014-08-04 16:52:17,647: ERROR/MainProcess] Unrecoverable error: TypeError("sequence index must be integer, not 'unicode'",)
Traceback (most recent call last):
  File "/home/kromedev/webapps/gorilla/lib/python2.7/celery-3.1.7-py2.7.egg/celery/worker  /__init__.py", line 206, in start
self.blueprint.start(self)
  File "/home/kromedev/webapps/gorilla/lib/python2.7/celery-3.1.7-py2.7.egg/celery/bootsteps.py", line 123, in start
step.start(parent)
  File "/home/kromedev/webapps/gorilla/lib/python2.7/celery-3.1.7-py2.7.egg/celery/bootsteps.py", line 373, in start
return self.obj.start()
  File "/home/kromedev/webapps/gorilla/lib/python2.7/celery-3.1.7-py2.7.egg/celery/worker/consumer.py", line 270, in start
blueprint.start(self)
  File "/home/kromedev/webapps/gorilla/lib/python2.7/celery-3.1.7-py2.7.egg/celery/bootsteps.py", line 123, in start
step.start(parent)
  File "/home/kromedev/webapps/gorilla/lib/python2.7/celery-3.1.7-py2.7.egg/celery/worker/consumer.py", line 786, in start
c.loop(*c.loop_args())
  File "/home/kromedev/webapps/gorilla/lib/python2.7/celery-3.1.7-py2.7.egg/celery/worker/loops.py", line 99, in synloop
connection.drain_events(timeout=2.0)
  File "/home/kromedev/webapps/gorilla/lib/python2.7/kombu-3.0.12-py2.7.egg/kombu/connection.py", line 279, in drain_events
return self.transport.drain_events(self.connection, **kwargs)
  File "/home/kromedev/webapps/gorilla/lib/python2.7/kombu-3.0.12-py2.7.egg/kombu/transport/virtual/__init__.py", line 844, in drain_events
self._callbacks[queue](message)
  File "/home/kromedev/webapps/gorilla/lib/python2.7/kombu-3.0.12-py2.7.egg/kombu/transport/virtual/__init__.py", line 529, in _callback
message = self.Message(self, raw_message)
  File "/home/kromedev/webapps/gorilla/lib/python2.7/kombu-3.0.12-py2.7.egg/kombu/transport/virtual/__init__.py", line 242, in __init__
properties = payload['properties']
TypeError: sequence index must be integer, not 'unicode'

Глядя на временную метку, всегда кажется, что она потерпела крах после того, как все задачи завершены. Поскольку у меня есть файл supervisor.conf для автоматического перезапуска, он затем зацикливается на попытке перезагрузить рабочий и мгновенно завершиться сбоем. Однако, если я выключаю все процессы с помощью supervisor и перезагружаюсь, все работает снова на несколько дней.

Supervisor.conf:

[program:celeryd]
command={{ PYTHON }} {{ PROJECT_DIR }}/manage.py celery worker -l info
numprocs=1
stdout_logfile={{ PROJECT_DIR }}/worker.log
stderr_logfile={{ PROJECT_DIR }}/worker.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs=600
killasgroup=true
priority=998

[program:celerybeat]
command={{ PYTHON }} {{ PROJECT_DIR }}/manage.py celery beat  -l INFO
numprocs=1
stdout_logfile={{ PROJECT_DIR }}/beat.log
stderr_logfile={{ PROJECT_DIR }}/beat.log
autostart=true
autorestart=true
startsecs=10
priority=999 

Не знаю, где можно начать отлаживать это - выкидывать его, если кто-то еще столкнулся с такой же проблемой и может пролить свет на это.

ОБНОВЛЕНИЕ: я вернулся к верному Erlang/Rabbit, и проблема полностью исчезла. Так что это IronMQ. Я не мог получить от них никакой помощи по этому поводу, поэтому они потеряли клиента!

0 ответов

Другие вопросы по тегам