Celery 4.0 中的周期性任务

periodic tasks in Celery 4.0

据我所知,由于 Celery 3.1 装饰器 @periodic_task 已被删除。

所以我正在尝试 运行 来自 celery docs 的示例,但无法意识到我做错了什么。

我在task_planner.py中有以下代码:

from celery import Celery
from kombu import Queue, Exchange



class Config(object):
    CELERY_QUEUES = (
        Queue(
            'try',
            exchange=Exchange('try'),
            routing_key='try',
        ),
    )
celery = Celery('tasks', 
                backend='redis://', 
                broker='redis://localhost:6379/0')
celery.config_from_object(Config)


celery.conf.beat_schedule = {
    'planner': {
        'task': 'some_task',
        'schedule': 5.0,
    },
}


@celery.task(queue='try')
def some_task():
    print('Hooray')

当我 运行: celery -A task_planner worker -l info -B 时,我只收到以下内容:[2016-11-27 19:06:56,119: INFO/Beat] Scheduler: Sending due task planner (some_task) 每 5 秒

但我期待输出 'Hooray'。

那么,我错过了什么?

已找到解决方案。 我有任务:

@celery.task(queue='try')
def some_task():
    print('Hooray')

我打印了它的名字:

print(some_task)

得到以下内容:

<@task: task_planner.some_task of tasks:0x7fceaaf5b9e8>

所以我刚刚将任务名称从 some_task 更改为 task_planner.some_task

celery.conf.beat_schedule = {
    'planner': {
        'task': 'task_planner.some_task',
        'schedule': 5.0,
    },
}

成功了!

[2016-11-29 10:09:57,697: WARNING/PoolWorker-3] Hooray

。您应该 运行 与 worker (如果任务与 beat 在同一模块中)和 loglevel 'info' 一起击败以查看结果:

celery -A task_planner worker -B -l info