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
据我所知,由于 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