2016-11-27 110 views
0

据我所知,因为芹菜3.1装饰者@periodic_task是depricated。在芹菜4.0的周期性任务

所以我想从芹菜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'。

那么,我错过了什么?

回答

4

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

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

我打印它的名字:

print(some_task) 

得到如下:

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

所以我只是改变了任务的名称从some_tasktask_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 

注意。您应该与工作人员(如果任务与beat中的任务位于同一模块中)运行拍子以及loglevel'info'以查看结果:

celery -A task_planner worker -B -l info