Django + Celery与周期性任务集成

时间:2015-11-04 00:48:55

标签: python django celery django-celery

我对如何配置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,我应该说:

  1. MyProject / tasks.py
  2. 中的任务
  3. MyProject / celery.py
  4. 中的'app'变量创建和初始化
  5. MyProject / settings.py
  6. 中的配置变量

    如果我这样做,我收到以下内容:

    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 配置。

    由于

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。 这个问题与我已经创建了队列的事实有关,这些队列并不受限制。 通过删除它们并重新启动,一切都完美地通过放置: 1. settings.py中的所有配置 2. celery.py中的所有芹菜创作