2011-11-22 25 views
24

मैं थोड़ी देर के लिए Django/Celery दस्तावेज़ से लड़ रहा हूं और कुछ मदद की ज़रूरत है।डीजेगो और सेलेरी के उदाहरण: आवधिक कार्य

मैं django-celery का उपयोग कर आवधिक कार्य चलाने में सक्षम होना चाहता हूं। मैंने इंटरनेट (और प्रलेखन) के चारों ओर कई अलग-अलग प्रारूपों और स्कीमाओं को देखा है कि कैसे इसे सेलेरी का उपयोग करके इसे प्राप्त करने के बारे में जाना चाहिए ...

क्या कोई सृजन, पंजीकरण और निष्पादन के मूल, कार्य करने वाले उदाहरण के साथ मदद कर सकता है एक django-अजवाइन आवधिक कार्य? विशेष रूप से, मैं जानना चाहता हूं कि मुझे एक कार्य लिखना चाहिए जो आवधिक टास्क क्लास को बढ़ाता है और उसे पंजीकृत करता है, या मुझे @periodic_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

आपके उत्तर के लिए धन्यवाद। यह जानना अच्छा है कि सजावट वास्तव में क्या है और एक ही चीज़ के दो रूप क्यों मौजूद हैं। क्या यह सही है कि मुझे आवधिक कार्य पंजीकृत करने की आवश्यकता नहीं है? मुझे इस उदाहरण को दस्तावेज़ीकरण में ढूंढना मुश्किल लगता है और यह सरलीकरण के साथ कर सकता है (जैसा आपने ऊपर किया है)। एक बार फिर धन्यवाद। –

+0

अरे, यहां दस्तावेज़ों का एक और उदाहरण है: http://ask.github.com/celery/reference/celery.decorators.html यदि आप सजावट का उपयोग करते हैं तो आपको कार्य को स्पष्ट रूप से पंजीकृत करने की आवश्यकता नहीं है। यह Django (https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#registering-the-tag) में आपके टेम्पलेटैट्स और फ़िल्टर को पंजीकृत करने वाले विकल्पों के समान ही है, यदि आप हैं उस से अधिक परिचित। – arie

+0

आपकी मदद के लिए फिर से धन्यवाद। –

संबंधित मुद्दे