Maison >développement back-end >Tutoriel Python >Comment créer un planificateur simple dans Django

Comment créer un planificateur simple dans Django

DDD
DDDoriginal
2024-10-20 16:16:02724parcourir

How to create a simple scheduler in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn