2011-07-26 15 views
5

celery का उपयोग करना, क्या यह कार्य के भीतर से संभव है कि यह जांचने के लिए कि आखिरी बार कार्य कब चल रहा था?अजवाइन: कार्य के अंतिम भाग के समय तक पहुंच?

मैं "आखिरी बार चलाने के बाद से सबकुछ पकड़ो" लागू करना चाहता हूं। मैं या तो अंतिम रन टाइमस्टैम्प का ट्रैक रख सकता हूं या उम्मीद है कि सेलेरी से इसकी पहुंच प्राप्त हो सकती है।

यह एक django परियोजना के भीतर से है, अगर इससे कोई फर्क पड़ता है।

उत्तर

3

डिफ़ॉल्ट सेलेरी में कार्य परिणामों का स्थायी भंडारण नहीं होता है, यदि आप बीट मोड में चल रहे हैं तो कुछ साफ प्रक्रिया साफ कार्य परिणामों और निष्पादन इंफोस के लिए भी चलती है। मैं सुझाव है कि आप की दुकान के लिए हर अंतिम निष्पादन तारीख एक NoSQL उपयोग करने के लिए है चाहते हैं, तो आप इस ओवरराइड द्वारा अपने कार्य में विधि after_return

def after_return(self, status, retval, task_id, args, kwargs, einfo): 
    #exit point for context managers 
    self.taskLogger.__exit__(status, retval, task_id, args, kwargs, einfo) 

इस विधि हर बार काम समाप्त होता है कहा जाता है किसी भी परिणाम के साथ क्या कर सकते हैं, स्थिति की जांच करके आप अपनी तिथि केवल तभी जमा कर सकते हैं जब कार्य सफलतापूर्वक समाप्त हो या उस व्यवहार को लागू करें जो आपकी आवश्यकताओं के अनुरूप सर्वोत्तम हो।

1

यदि आप django-celery का उपयोग कर रहे हैं, तो last_run मॉडल में सहेजा गया है। अपने कार्य नाम का उपयोग कर आवधिक टास्क मॉडल को फ़िल्टर करने के लिए सामान्य django ORM का उपयोग करें।

from djcelery.models import PeriodicTask 

last_run = PeriodicTask.objects.only('last_run_at').get(task='TASK_NAME_HERE').last_run_at 
+0

यह केवल समय-समय पर कार्यों के लिए काम करेंगे। – navyad

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