Maison >développement back-end >Tutoriel Python >Comment créer un planificateur simple dans Django
Si vous devez exécuter une fonction toutes les X minutes/secondes, etc. pour effectuer des nettoyages, déclencher certaines opérations, vous pouvez effectuer un simple planificateur à l'aide du module de thread et du cli personnalisé de Django commandes.
Disons que je souhaite appeler une fonction toutes les 5 secondes pour publier quelque chose sur une API externe.
Dans votre application Django, créez un dossier/package nommé management à l'intérieur de ce dossier, créez un autre dossier nommé commandes. Dans le dossier des commandes, créez un module nommé runposter.py. À la fin, vous aurez quelque chose comme cette structure yourapp/management/commands/runposter.py.
Dans ce code nous utilisons un thread qui exécute une boucle while tant qu'il n'est pas arrêté toutes les 5 secondes. Remplacez print("posting") par la fonction/logique que vous souhaitez exécuter.
# runposter.py import time from threading import Thread, Event from django.conf import settings from django.core.management.base import BaseCommand stop_event = Event() def my_job(): while not stop_event.is_set(): try: print("posting") time.sleep(5) except KeyboardInterrupt: break class Command(BaseCommand): help = "Run Poster." def handle(self, *args, **options): poster = Thread(target=my_job) try: print("Starting poster...") poster.start() while poster.is_alive(): poster.join(timeout=1) except KeyboardInterrupt: print("Stopping poster...") stop_event.set() poster.join() print("Poster shut down successfully!")
Bien, ouvrez maintenant une autre fenêtre de terminal et exécutez python manage.py runposter. La commande runposter, comme vous pouvez le voir, a été créée à partir du nom de module que nous avons donné.
Bien sûr, pour quelque chose de plus complexe, je recommande d'utiliser rq-scheduler ou des tâches périodiques de céleri ou django-q.
Mais, pour les cas simples, cela devrait suffire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!