我对如何配置Django + Celery感到有点困惑。 我按照this guide中的报告进行了跟踪。 这是我必须写的一堆配置:
BROKER_URL = 'amqp://...'
queue_arguments = {'x-max-length': 1}
CELERY_QUEUES = (
Queue('queue1', routing_key='queue1', queue_arguments=queue_arguments),
Queue('queue2', routing_key='queue2', queue_arguments=queue_arguments))
from datetime import timedelta
CELERYBEAT_SCHEDULE = {
'task1': {
'task': 'MyProject.tasks.this_is_task_1',
'schedule': timedelta(seconds=1)
},
'task2': {
'task': 'MyProject.tasks.this_is_task_2',
'schedule': timedelta(seconds=1)
}
}
CELERY_ROUTES = {
'MyProject.tasks.this_is_task_1': {
'queue': 'queue1',
'routing_key': 'queue1',
},
'MyProject.tasks.this_is_task_2': {
'queue': 'queue2',
'routing_key': 'queue2',
}
}
app = Celery('MyProject')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MyProject.settings')
app = Celery('MyProject')
app.conf.update(
CELERY_TASK_RESULT_EXPIRES=30,
CELERY_IGNORE_RESULT=True,
)
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
基于1,我应该说:
如果我这样做,我收到以下内容:
Couldn't apply scheduled task check_block_height: Queue.declare: (406) PRECONDITION_FAILED - inequivalent arg 'x-max-length'for queue 'queue2' in vhost '...': received the value '1' of type 'signedint' but current is none
[2015-11-04 00:30:12,899: DEBUG/MainProcess] beat: Waking up now.
它的行为就好像已经创建了队列,但没有任何选项。
如果我在settings.py
中只保留 CELERYBEAT_SCHEDULE 和 CELERY_ROUTES ,那么一切似乎都有效。事实是,队列配置被忽略,即不使用 CELERY_QUEUE 配置。
由于
答案 0 :(得分:0)
我解决了这个问题。 这个问题与我已经创建了队列的事实有关,这些队列并不受限制。 通过删除它们并重新启动,一切都完美地通过放置: 1. settings.py中的所有配置 2. celery.py中的所有芹菜创作