2016-11-27 146 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