2012-03-03 22 views
11

ile kereviz girişleri nasıl programlanır üretilir Girdiler eklendiğinde programatik olarak kerevit girişleri oluşturmak ve kereviz yeniden üretme umuyordum. docs here devlet Kereviz ve Django

By default the entries are taken from the CELERYBEAT_SCHEDULE setting, but custom stores can also be used, like storing the entries in an SQL database.

yüzden bunu yapmak mümkün uzatmak gerekir hangi dersleri anlamaya çalışıyorum.

celery scheduler docs ve djcelery api docs'a bakıyorum ama bu yöntemlerden bazılarının var olmadığı ile ilgili bir döküman var, bu yüzden bir kaynağa dalmak ve birisinin beni doğru yönde gösterebileceğini umuyordum.

Yaptığım şeyin yüksek düzeyde olması, yardımcı olacağını düşünüyorum ... Kullanıcı olarak, önceden tanımlanmış bir görevler kümesinden seçim yapabilmem ve kullanıcının bir tür özel seçim yapabilmesinin bir yolunu bulmam gerekiyor Her gün/hafta/ay ve gün ve saat gibi, yürütmek için programlayın.

Ayrıca bu djcelery ile Django'da.

GÜNCELLEME Ben djcelery admin kodunu görmek ama bu veriler kalıcı ediliyor ilgili açık değilim.

def addTask(request): 

intervalSchedule = IntervalSchedule.from_schedule(schedule(timedelta(seconds=10))) 
intervalSchedule.save() 
modelData = dict(
    name="dcTestPersist", 
    task="technologytrackerapi.views.createRecord", 
    schedule=intervalSchedule, 
) 
periodicTask = PeriodicTask(**modelData) 
periodicTask.save() 
return render_to_response('taskView.html') 

veri db doğru görünüyor ama cin çalıştırdığında bu hata var: Şu anda şöyle bir jenerik addTask görünüme sahip

[2012-03-06 00:23:07,926: WARNING/Beat] Process Beat:
[2012-03-06 00:23:07,926: WARNING/Beat] Traceback (most recent call last):
[2012-03-06 00:23:07,926: WARNING/Beat] File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
[2012-03-06 00:23:07,926: WARNING/Beat] self.run()
[2012-03-06 00:23:07,927: WARNING/Beat] File "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py", line 464, in run
[2012-03-06 00:23:07,927: WARNING/Beat] self.service.start(embedded_process=True)
[2012-03-06 00:23:07,927: WARNING/Beat] File "/home/dchesterman/Documents/PythonDev /.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py", line 403, in start
[2012-03-06 00:23:07,927: WARNING/Beat] interval = self.scheduler.tick()
[2012-03-06 00:23:07,927: WARNING/Beat] File "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py", line 194, in tick
[2012-03-06 00:23:07,927: WARNING/Beat] next_time_to_run = self.maybe_due(entry, self.publisher)
[2012-03-06 00:23:07,927: WARNING/Beat] File "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py", line 170, in maybe_due
[2012-03-06 00:23:07,927: WARNING/Beat] is_due, next_time_to_run = entry.is_due()
[2012-03-06 00:23:07,928: WARNING/Beat] File "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/djcelery/schedulers.py", line 54, in is_due
[2012-03-06 00:23:07,928: WARNING/Beat] return self.schedule.is_due(self.last_run_at)
[2012-03-06 00:23:07,928: WARNING/Beat] AttributeError: 'NoneType' object has no attribute 'is_due'

Neden emin değilim benim zamanlama,

cevap

6

Bu benim için çalışıyor sona erdi budur:

def addTask(request): 

    intervalSchedule = IntervalSchedule.from_schedule(schedule(timedelta(seconds=10))) 
    intervalSchedule.save() 

    modelData = dict(
     name="dcTestPersist", 
     task="technologytrackerapi.tasks.createRecord", 
     interval_id=intervalSchedule.pk, 
) 

    periodicTask = PeriodicTask(**modelData) 
    periodicTask.save() 

    me = ModelEntry(periodicTask) 

    try: 
     me.save() 

    except: 
    from django.db import connection 
    print connection.queries 
    raise 

    return render_to_response('taskView.html') 

Bir ModelEntry içinde Periyodik Görev sarmak zorunda kaldı.

+0

Bazı nedenlerden dolayı, bunu planlanmış görevimi oluştururken izledim ve 'ModelEntry' ile sarılmasına gerek yoktu. Neden veya ne 'ModelEntry' olduğunu bilmiyorum. Rastgele not - Ben de 'expires' ayarlıyordum ve hiçbir etkisi olmadığını şaşırdım. Bu bir etkisi var, ama "celerybeat" değil "celerybeat" - "kereviz" süresiz olarak tetiklemeye devam eder, ancak "sona ermeden sonra" celeryd "(" iptal edildi "durumu) yok sayar. – Chris

+0

Django ile entegrasyon olan onun djcelery bir parçası. Bunu kullanıp kullanmadığınızdan emin değilim. https://github.com/celery/django-celery Bundan şüpheliyim. Kullanımdan kaldırılmış görünüyor. Bu 4 yaşında. – Dustin

+0

@ Dustin, o zamandan sonra gelebilecek diğerleri için bir not yazmaktan çok üzgün değildi. Cevabınız, internette programlı olarak CeleryBeat için bir PeriodicTask programlamanın en basit örneğidir! Kalan yapılandırma dosyasını kullanın veya cevabın sadece bir kısmını verin. (Ben djcelery kullanıyorum - sanırım bu veritabanı arka uçtan geliyor ve ben djcelery.models import * 'dan.) – Chris

İlgili konular