44

デフォルトでは、Celery はすべてのタスクを「celery」キューに送信しますが、パラメーターを追加することでこの動作を変更できます。

@task(queue='celery_periodic')
def recalc_last_hour():
    log.debug('sending new task')
    recalc_hour.delay(datetime(2013, 1, 1, 2)) # for example

スケジューラー設定:

CELERYBEAT_SCHEDULE = {
   'installer_recalc_hour': {
        'task': 'stats.installer.tasks.recalc_last_hour',
        'schedule': 15  # every 15 sec for test
    },
}
CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler"

ワーカーを実行します。

python manage.py celery worker -c 1 -Q celery_periodic -B -E

このスキームは期待どおりに機能しません。このワーカーは定期的なタスクを「celery_periodic」ではなく「celery」キューに送信します。どうすれば修正できますか?

PS セロリ==3.0.16

4

3 に答える 3

54

定期的なタスクはセロリ ビートによってキューに送信され、そこでセロリ API で行うすべてのことを行うことができます。セロリビートに付属する構成のリストは次のとおりです。

https://celery.readthedocs.org/en/latest/userguide/periodic-tasks.html#available-fields

あなたの場合:

CELERYBEAT_SCHEDULE = {
   'installer_recalc_hour': {
        'task': 'stats.installer.tasks.recalc_last_hour',
        'schedule': 15,  # every 15 sec for test
        'options': {'queue' : 'celery_periodic'},  # options are mapped to apply_async options
    },
}
于 2015-01-09T09:45:44.990 に答える