2011-05-25 23 views
11

django-celery'un yönetici arabirimini kullanarak kereviz için düzenli bir görev oluşturmak istiyorum. El ile veya komut dosyasıyla çağrıldığında harika çalışan bir görevim var. Sadece celerybeat ile çalışmaz. Hata ayıklama günlüklerine göre görev, ilk almada enabled = False olarak ayarlanmıştır ve nedenini merak ediyorum.celerybeat otomatik olarak periyodik görevi devre dışı bırakır

Periyodik görevi eklerken ve [1, False] konumunu konumsal argümanlar olarak geçirirken, görev otomatik olarak devre dışı bırakılır ve daha fazla çıktı göremiyorum. Argümanlar eklenmediğinde, görev yürütülür, ancak gerekli argümanları sağlamadığım için anında bir istisna yaratır (mantıklıdır).

Burada sorunun ne olduğunu gören var mı?

Şimdiden teşekkürler.

Bu

besleyen argümanlar sonra çıktısı:

[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. 

DÜZENLEME: Aşağıdaki ayarı ile çalışır. Hala neden django-celery ile çalışmadığı konusunda hiçbir fikrim yok.

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

size görev ve periodictask yapılandırmasını gönderebilir miyim? –

+0

Sorunumu gördüğünüz için teşekkür ederiz. Ben "CELERYBEAT_SCHEDULE" yi ben koymadım, çünkü bunun yerine django-ciyety'nin yönetimini kullandım. Ayrıca [SSS] 'i (http://docs.celeryproject.org/en/latest/faq.html#why-won-t-my-task-run) da kontrol ettim, ancak asıl gönderide söylediğim gibi görevi el ile kabuğundan başlatabilir. Gözardı edebileceğim başka bir şey var mı? – jnns

+0

Tam olarak aynı sorun var mı ... Herhangi bir çözüm? – Aldarund

cevap

14

Aynı sorunu yaşadım. Argümanların JSON formatlı olduğundan emin olun. Örneğin, konumsal ardları [1, yanlış] - küçük harf 'yanlış' olarak ayarlamayı deneyin - Sadece bir django-kereviz örneğinde (sürüm 2.2.4) test ettim ve işe yaradı.

+1

Evet, onaylıyorum, sorun kodlama. Aslında dize argümanları için "tek olanın yerine" çift tırnak kullanmanız gerekir. –

7

Ben de aynı problem var: Anahtar kelime args için

, { "aldarund" "isim"} gibi bir şey kullanın.

Djcelery'de PeriodicTask modellerinin açıklaması ile ("JSON kodlanmış konumsal argümanlar"), Evan yanıtıyla aynıdır. Kaydetmeden önce kodlamak için python json lib kullanmayı deneyin.

Ve benimle bu iş

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

kereviz sürüm 3.0.11

+0

bu sorunun cevabını gerçekten çözdüm. – vipin