2012-07-25 5 views
12

Plus précisément, commentComment configurer APScheduler dans un projet Django?

  • Configuration APScheduler dans un projet Django
  • Commencez à courir
  • Ecrire à Django ORM
+0

Qu'est-ce que vous voulez réaliser? Que voulez-vous dire par * Écrire sur Django ORM *? – MattH

+0

nous pouvons vous donner une réponse aussi claire que votre question: installer django, installer APScheduler. écrivez vos points de vue. Utilisez add_date_job pour ajouter un travail. et faites vos affaires où vous voulez dans ce travail – ornoone

+0

Depuis APScheduler soutient SQLAlchemy et MongoDb comme magasins de travail, il veut utiliser Django ORM. Ma conjecture – laffuste

Répondre

12

Eh bien, je vais avoir un aller. En supposant que vous avez installé apscheduler (ou le mettre dans votre chemin Python) Le basic documentation for APS répertorie le code suivant pour le démarrage d'un emploi:

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() 

La question que je soupçonne que vous ayez est de savoir comment déclencher le démarrage de celui de Django. Vous avez plusieurs options, consistant pour la plupart à "le placer dans un endroit où il sera exécuté". Par exemple, ajoutez-le au bas d'un fichier models.py, ou au urls.py et il sera traité une fois lors de chaque redémarrage de Django, puis continuera à s'exécuter en arrière-plan. Les accès à la base de données peuvent ensuite être effectués normalement depuis la fonction - il suffit d'importer vos modèles comme d'habitude pour vos requêtes. Toutefois, considérez que si vous faites cela, vous devrez tuer & redémarrer votre serveur chaque fois que vous voulez modifier la planification. Je suis aussi incertain comment cela va prix avec des plusieurs threads (vous aurez> 1 minuterie?)

Vous pourriez vraiment vouloir envisager d'aller avec quelque chose comme Celery (via django-celery) qui vous amène tout cela, en plus d'une Démon de planification séparé avec un contrôle plus fin de la programmation.

+4

Merci, le démarrage était le point le plus intéressant pour moi. Je regardais APScheduler parce que CrontabScheduler dans Celery ne supporte pas les résolutions inférieures à minutes, et IntervalScheduler ne supporte pas start_date comme le fait APScheduler. Cela signifie qu'il n'est pas possible de faire des choses comme "tous les lundis" et "lundi à 20:14:50". Mais j'ai décidé de rester avec Celery, et d'utiliser un Scheduler personnalisé. Je préfère avoir un processus séparé, qui s'exécute en dehors du processus du serveur Web. Beaucoup plus facile à contrôler et à déboguer, IMO. – jeverling

+0

"Cependant, sachez que si vous faites cela, vous devrez tuer et redémarrer votre serveur chaque fois que vous voulez modifier la programmation." En fait, cela ne nécessite pas nécessairement de tuer le serveur. Démarrage simple de APscheduler ne nécessite pas l'ajout de tâches. OP pourrait simplement démarrer le planificateur à un endroit et avoir du code ailleurs pour ajouter et supprimer des tâches si nécessaire, dans une vue pour certains utilisateurs, par exemple. Si OP ne veut pas faire face à l'utilisation de céleri et prévoit de garder les choses simples, c'est toujours une option. – skeletalbassman

Questions connexes