Comment créer un planificateur simple dans Django

DDD
Libérer: 2024-10-20 16:16:02
original
682 Les gens l'ont consulté

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!")

Copier après la connexion

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!

source:dev.to
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal