【发布时间】:2014-05-05 18:01:55
【问题描述】:
我目前遇到一个使用 Celery 的项目的问题。当将任务路由到队列并且任务数量超过并发时,工作人员会脱机。在这种状态下,它仍在处理任务,但工作人员似乎离线并且无法检查。 ping 工人或检查 active_queues 会给出消息“错误:在时间限制内没有节点回复”。 Worker 的任务数等于或小于 Worker 的并发数后,Worker 才会重新上线。
使用 '-l debug' 运行 worker 并没有显示任何错误,因为 worker 离线了。尽管无法对其进行检查,但该工作人员似乎处于脱机状态时,日志仍在继续。
Celery 版本为 3.1.11,代理为 RabbitMQ 3.3.0。
我的 Celery 配置:
from celery.schedules import crontab
from kombu import Exchange, Queue
CELERY_DEFAULT_QUEUE = 'default'
CELERY_QUEUES = (
Queue('manager_tasks',
exchange=Exchange('manager', type='direct'),
routing_key='manager.#'),
Queue('high_priority_tasks',
exchange=Exchange('high', type='direct'),
routing_key='high.#'),
Queue('low_priority_tasks',
exchange=Exchange('low', type='direct'),
routing_key='low.#'),
)
CELERY_DEFAULT_EXCHANGE = 'tasks'
CELERY_DEFAULT_EXCHANGE_TYPE = 'topic'
CELERY_DEFAULT_ROUTING_KEY = 'task.default'
BROKER_URL = 'amqp://[user]:[password]@[url]:[port]/[vhost]'
CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'
CELERYBEAT_SCHEDULE = {
'scan-hosts': {
'task': 'myapp.task',
'schedule': crontab(minute='*/1',
hour='8-17',
day_of_week='mon-fri'),
'options': {
'queue': 'manager_tasks',
'routing_key': 'manager.#'
},
},
}
CELERY_TASK_RESULT_EXPIRES = 18000 # 5 hours
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
【问题讨论】:
标签: celery