2011-05-25 25 views
11

मैं django-celery के व्यवस्थापक इंटरफ़ेस का उपयोग करके अजवाइन के लिए आवधिक कार्य बनाना चाहता हूं। मेरे पास एक कार्य सेट अप है जो मैन्युअल रूप से या स्क्रिप्ट द्वारा कॉल किए जाने पर बहुत अच्छा चलता है। यह सिर्फ सेलेरीबीट के माध्यम से काम नहीं करता है। डीबग लॉग के अनुसार कार्य को पहले पुनर्प्राप्ति पर enabled = False पर सेट किया गया है और मुझे आश्चर्य है कि क्यों।सेलेरीबीट स्वचालित रूप से आवधिक कार्य को अक्षम करता है

आवधिक कार्य जोड़ते समय और [1, False] को स्थितित्मक तर्क के रूप में पास करते समय, कार्य स्वचालित रूप से अक्षम हो जाता है और मुझे कोई और आउटपुट दिखाई नहीं देता है। तर्क के बिना जोड़े जाने पर कार्य निष्पादित किया जाता है लेकिन तत्काल अपवाद उठाता है क्योंकि मैंने आवश्यक तर्क (समझ में नहीं आता) की आपूर्ति नहीं की है।

क्या कोई यहां देखता है कि समस्या क्या है?

अग्रिम धन्यवाद।

यह आपूर्ति तर्क के बाद उत्पादन होता है:

[DEBUG/Beat] SELECT "djcelery_periodictask"."id", [...] 
      FROM "djcelery_periodictask" 
      WHERE "djcelery_periodictask"."enabled" = true ; args=(True,) 

[DEBUG/Beat] SELECT "djcelery_intervalschedule"."id", [...] 
      FROM "djcelery_intervalschedule" 
      WHERE "djcelery_intervalschedule"."id" = 3 ; args=(3,) 

[DEBUG/Beat] SELECT (1) AS "a" 
      FROM "djcelery_periodictask" 
      WHERE "djcelery_periodictask"."id" = 3 LIMIT 1; args=(3,) 

[DEBUG/Beat] UPDATE "djcelery_periodictask" 
      SET "name" = E'<taskname>', "task" = E'<task.module.path>', 
       "interval_id" = 3, "crontab_id" = NULL, 
       "args" = E'[1, False,]', "kwargs" = E'{}', "queue" = NULL, 
       "exchange" = NULL, "routing_key" = NULL, 
       "expires" = NULL, "enabled" = false, 
       "last_run_at" = E'2011-05-25 00:45:23.242387', "total_run_count" = 9, 
       "date_changed" = E'2011-05-25 09:28:06.201148' 
      WHERE "djcelery_periodictask"."id" = 3; 
      args=(
        u'<periodic-task-name>', u'<task.module.path>', 
        3, u'[1, False,]', u'{}', 
        False, u'2011-05-25 00:45:23.242387', 9, 
        u'2011-05-25 09:28:06.201148', 3 
      ) 

[DEBUG/Beat] Current schedule: 
<ModelEntry: celery.backend_cleanup celery.backend_cleanup(*[], **{}) {<crontab: 0 4 * (m/h/d)>} 
[DEBUG/Beat] Celerybeat: Waking up in 5.00 seconds. 

संपादित करें: यह निम्न सेटिंग के साथ काम करता है। मुझे अभी भी पता नहीं है कि यह django-celery के साथ क्यों काम नहीं करता है।

CELERYBEAT_SCHEDULE = { 
    "example": { 
     "task": "<task.module.path>", 
     "schedule": crontab(), 
     "args": (1, False) 
    }, 
} 
+0

आप अपने कार्य को और periodictask विन्यास पोस्ट कर सकते हैं? –

+0

मेरी समस्या के बारे में देखने के लिए धन्यवाद। मैंने 'CELERYBEAT_SCHEDULE' सेट नहीं किया क्योंकि मैंने इसके बजाय django-celery के प्रशासन का उपयोग किया था। मैंने [एफएक्यू] (http://docs.celeryproject.org/en/latest/faq.html#why-won-t-my-task-run) की भी जांच की लेकिन जैसा कि मैंने मूल पोस्टिंग में कहा था, मैं हूं मैन्युअल रूप से खोल से कार्य लॉन्च करने में सक्षम। क्या मैं कुछ और अनदेखा कर सकता था? – jnns

+0

एक ही समस्या है ... कोई समाधान? – Aldarund

उत्तर

14

मुझे एक ही समस्या थी। सुनिश्चित करें कि तर्क JSON प्रारूपित हैं। उदाहरण के लिए, स्थितित्मक तर्कों को [1, झूठी] - लोअरकेस 'झूठी' पर सेट करने का प्रयास करें - मैंने अभी इसे डीजेंगो-सेलेरी इंस्टेंस (संस्करण 2.2.4) पर परीक्षण किया है और यह काम करता है।

+1

हाँ, मैं पुष्टि करता हूं, समस्या एन्कोडिंग है। वास्तव में स्ट्रिंग तर्कों के लिए आपको "एकल के बजाय" डबल कोट्स का उपयोग करना होगा। –

7

मैं भी एक ही समस्या है:

कीवर्ड आर्ग के लिए, { "aldarund" "नाम"} की तरह कुछ का उपयोग करें।

डीजेसेलरी ("JSON एन्कोडेड पोजिशनल तर्क") में आवधिक टास्क मॉडल के विवरण के साथ, इवान उत्तर के समान। मैं बचाने से पहले एन्कोड करने के लिए पायथन जेसन लिब का उपयोग करने का प्रयास करें।

और मेरे साथ इस काम

import json 
o = PeriodicTask() 
o.kwargs = json.dumps({'myargs': 'hello'}) 
o.save() 

अजवाइन संस्करण 3.0.11

+0

लोग इस उत्तर ने वास्तव में मेरी समस्या हल की है। – vipin

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