2012-07-25 26 views
12

Özellikle, nasılDjango projesinde APScheduler nasıl kurulur?

  • Kurulum APScheduler Django ORM
  • yaz çalıştıran bir Django projesi
  • Başlat içinde
+0

Neyi başarmak istiyorsunuz? Django ORM * 'e ne yazıyor? – MattH

+0

, sorunuza açık bir yanıt verebiliriz: django'yu kurun, APScheduler'ı yükleyin. görüşlerini yaz. iş eklemek için add_date_job kullanın. ve bu işlerde istediğiniz her şeyi yapın – ornoone

+0

APScheduler, SQLAlchemy ve MongoDb'yi iş mağazaları olarak desteklediğinden Django ORM kullanmak istiyor. Tahminim. – laffuste

cevap

12

Eh, gitmek gerekir. Eğer apscheduler yüklü varsayarsak (veya Python yoluna koymak) basic documentation for APS bir işi başlatmak için aşağıdaki kodu listelenmektedir:

from apscheduler.scheduler import Scheduler 

sched = Scheduler() 

@sched.interval_schedule(hours=3) 
def some_job(): 
    print "Decorated job" 

sched.configure(options_from_ini_file) 
sched.start() 

Ben senin sahip şüpheli sorunu Django bunun başlangıç ​​tetiklemek için nasıl. Çoğunlukla "çalıştırılacak bir yere koyma" dan oluşan birden çok seçeneğiniz var. Örneğin, bir models.py dosyasının sonuna veya urls.py dosyasına ekleyin ve her Django yeniden başlatıldığında bir kez işlenecek, ardından arka planda çalışmaya devam edecektir. Veritabanı erişimleri daha sonra işlevin içinden normal olarak gerçekleştirilebilir - sadece modellerinizi sorgularınız için normal olarak içe aktarın. Ancak, bunu yaparsanız, &'u öldürmeniz gerekeceğini, zamanlamayı değiştirmek istediğinizde sunucunuzu yeniden başlatmanız gerektiğini düşünün. Birden fazla iş parçacığıyla bunun nasıl kullanılacağından da emin değilim (> 1 zamanlayıcınız var mı?)

Tüm bunlara ek olarak, Celery (django-celery aracılığıyla) gibi bir şeyle gitmeyi düşünebilirsiniz. Çizelgelemenin daha iyi kontrolü ile ayrı programlama çizelgesi.

+4

Teşekkürler, başlangıç ​​benim için en ilginç nokta oldu. APScheduler'a bakıyordum çünkü Celery'daki CrontabScheduler, dakikadan daha küçük çözünürlükleri desteklemiyor ve IntervalScheduler, APScheduler'ın yaptığı gibi start_date'i desteklemiyor. Bu, "her ikinci pazartesi" ve "pazartesi günü 20:14:50" gibi şeyleri yapmanın mümkün olmadığını gösterir. Ama ben kerevizle takılmaya karar verdim ve özel bir programlayıcı kullanıyorum. Web sunucusu işleminin dışında çalışan ayrı bir işlem yapmayı tercih ediyorum. IMO kontrol etmek ve hata ayıklamak için çok daha kolay. – jeverling

+0

"Ancak, bunu yaparsanız, zamanlamayı değiştirmek istediğiniz zaman sunucunuzu öldürmeniz ve yeniden başlatmanız gerekeceğini düşünün." Aslında bu mutlaka sunucuyu öldürmeyi gerektirmiyor. Basitçe APscheduler'i başlatmak, işlerin eklenmesine gerek duymaz. OP, programlayıcıyı bir yerde basitçe başlatabilir ve daha sonra, örneğin, belirli kullanıcılar için bir görünüm olarak, ihtiyaç duyulduğunda işleri ekleyip kaldırabilecek başka bir koda sahip olabilir. Eğer OP, Kereviz kullanmanın üstesinden gelmek istemiyorsa ve işleri basit tutmayı planlıyorsa, bu hala bir seçenektir. – skeletalbassman