目前我们有一个 Python Django 应用程序托管在 Heroku 云中,它使用 Celery 工作人员进行后台处理。
Celery 工人使用 django DB 作为代理。最近我们决定使用 IronMq 作为代理,因为它是一个企业解决方案。
我们使用的包是
Python 2.7
Django 1.3
Celery 3.0.16
Django-celery 3.0.11
Iron-celery 0.3.1
我们正在使用两个工人。一个工作人员用于队列“正常优先级”,另一个工作人员用于队列 HighPriority'。但是,当应用程序疲于启动“HighPriority”队列的工作人员时,会触发一个错误,结果两个工作人员都崩溃了。
以下是我们用于配置 IronMQ 和 celery 队列的其他设置。
BROKER_URL='ironmq://xxxxx:xxxxx@'
CELERY_RESULT_BACKEND='ironcache://xxxxx:xxxxx@'
import os
import djcelery
import iron_celery
from kombu import Exchange, Queue
djcelery.setup_loader()
CELERY_DEFAULT_QUEUE = 'NormalPriority'
CELERY_QUEUES = {
CELERY_DEFAULT_QUEUE: {
'exchange': CELERY_DEFAULT_QUEUE,
'binding_key': CELERY_DEFAULT_QUEUE,
}
}
CELERY_CREATE_MISSING_QUEUES=True
CELERY_ROUTES = {'tasks.retrieveDocketUsingWorker': {'queue': 'HighPriority'},
'tasks.retrieveDocketFromDdUsingWorker': {'queue': 'HighPriority'}
}
我在下面添加了一小部分错误日志。有人请看看这个。
2013-03-14T09:21:17+00:00 app[celeryd1.1]: self.queue_declare(nowait, passiv
e=False)
2013-03-14T09:21:17+00:00 app[celeryd1.1]: File "/app/.heroku/python/lib/pytho
n2.7/site-packages/kombu/entity.py", line 497, in queue_declare
2013-03-14T09:21:17+00:00 app[celeryd1.1]: nowait=nowait)
2013-03-14T09:21:17+00:00 app[celeryd1.1]: File "/app/.heroku/python/lib/pytho
n2.7/site-packages/kombu/transport/virtual/__init__.py", line 401, in queue_decl
are
2013-03-14T09:21:17+00:00 app[celeryd1.1]: return queue, self._size(queue),
0
2013-03-14T09:21:17+00:00 app[celeryd1.1]: File "/app/.heroku/python/lib/pytho
n2.7/site-packages/iron_celery/iron_mq_transport.py", line 78, in _size
2013-03-14T09:21:17+00:00 app[celeryd1.1]: return details["size"]
2013-03-14T09:21:17+00:00 app[celeryd1.1]: **TypeError: string indices must be int
egers**
2013-03-14T09:21:17+00:00 app[celeryd1.1]: [2013-03-14 05:21:17,631: INFO/MainPr
ocess] Celerybeat: Shutting down...
2013-03-14T09:21:18+00:00 heroku[celeryd1.1]: Process exited with status 0
2013-03-14T09:21:18+00:00 heroku[celeryd1.1]: State changed from up to crashed
2013-03-14T09:21:23+00:00 heroku[router]: at=info method=POST path=/getDocketDow
nloaderWorkerStatus/ host=www.irelanddev.com fwd="115.119.213.182" dyno=web.1 qu
eue=0 wait=0ms connect=1ms service=2447ms status=200 bytes=60
2013-03-14T09:21:26+00:00 heroku[router]: at=info method=POST path=/getDocketDow
nloaderWorkerStatus/ host=www.irelanddev.com fwd="115.119.213.182" dyno=web.1 qu
eue=0 wait=0ms connect=1ms service=23ms status=200 bytes=60
2013-03-14T09:21:31+00:00 heroku[router]: at=info method=POST path=/getDocketDow
nloaderWorkerStatus/ host=www.irelanddev.com fwd="115.119.213.182" dyno=web.1 qu
eue=0 wait=0ms connect=1ms service=196ms status=200 bytes=60
2013-03-14T09:21:36+00:00 heroku[router]: at=info method=POST path=/getDocketDow
提前致谢。