2011-11-22 50 views
24

我一直在爭取Django/Celery文檔一段時間,需要一些幫助。Django和Celery的示例:週期性任務

我希望能夠使用django-celery運行週期性任務。我已經看到了互聯網(和文檔)的幾種不同的格式和模式,以瞭解如何使用Celery實現這一目標...

有人可以幫助創建,註冊和執行的基本功能示例django-celery定期任務?特別是,我想知道是否應該編寫一個擴展PeriodicTask類並註冊該任務的任務,或者是否應該使用@periodic_task修飾器,或者是否應該使用@task修飾器,然後爲該任務設置一個計劃執行。

我不介意是否所有三種方式都可能,但我希望看到至少有一種方法可行的例子。非常感謝您的幫助。

回答

37

example from the docs怎麼了?

from celery.task import PeriodicTask 
from clickmuncher.messaging import process_clicks 
from datetime import timedelta 


class ProcessClicksTask(PeriodicTask): 
    run_every = timedelta(minutes=30) 

    def run(self, **kwargs): 
     process_clicks() 

你可以使用裝飾寫相同的任務:

from celery.task.schedules import crontab 
from celery.task import periodic_task 

@periodic_task(run_every=crontab(minute="*/30")) 
def process_clicks(): 
    .... 

decorator syntax只是讓你把現有的功能/任務爲週期性任務不直接修改它們。

對於要執行的任務celerybeat must be running

+0

感謝您的回答。很高興知道裝飾者究竟是什麼以及爲什麼兩種形式存在相同的東西。那麼我沒有必要註冊PeriodicTasks是否正確?我發現這個例子很難在文檔中找到,它可以通過簡化來完成(就像你上面所做的那樣)。再次感謝。 –

+0

嘿, 這是來自文檔的另一個示例:http://ask.github.com/celery/reference/celery.decorators.html 如果您使用裝飾器,則不必顯式註冊該任務。這與您在Django中註冊模板標籤和過濾器的選項非常相似(https://docs.djangoproject.com/zh/dev/howto/custom-template-tags/#registering-the-tag),如果您對此更熟悉。 – arie

+0

再次感謝您的幫助。 –