无法检查芹菜

时间:2014-05-05 18:01:56

标签: celery

我目前遇到了使用Celery的项目的问题。将任务路由到队列时,当任务数超过并发时,工作程序将脱机。在此状态下,它仍在处理任务,但工作人员显示为脱机且无法检查。 Ping工作者或执行检查active_queues会显示消息“错误:时间约束内没有回复节点”。在任务数量等于或小于工作人员的并发数后,工作人员将重新联机。

当工作人员离线时,使用'-l debug'运行worker没有显示任何错误。尽管无法检查工作人员似乎处于脱机状态,但日志仍在继续。

Celery版本为3.1.11,代理版本为RabbitMQ 3.3.0。

我的芹菜配置:

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'

1 个答案:

答案 0 :(得分:1)

根据我在此发现的情况,工作人员似乎离线以表示它已满并无法预取任何更多任务。一旦能够接收更多任务并在满足并发和预取限制后返回到“离线”状态,它就会恢复。