Wenn Sie alle Befehle.
Angenommen, ich möchte alle 5 Sekunden eine Funktion aufrufen, um etwas auf einer externen API zu veröffentlichen.
Erstellen Sie in Ihrer Django-App einen Ordner/ein Paket mit dem Namen „management“. Erstellen Sie in diesem Ordner einen weiteren Ordner mit dem Namen „commands“. Erstellen Sie im Befehlsordner ein Modul mit dem Namen runposter.py. Am Ende haben Sie so etwas wie diese Struktur: yourapp/management/commands/runposter.py.
In diesem Code verwenden wir einen Thread, der eine While-Schleife ausführt, solange er nicht alle 5 Sekunden gestoppt wird. Ersetzen Sie print("posting") durch die Funktion/Logik, die Sie ausführen möchten.
# 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!")
Schön, jetzt öffnen Sie ein weiteres Terminalfenster und führen Sie python manage.py runposter aus. Wie Sie sehen können, wurde der Befehl runposter aus dem von uns angegebenen Modulnamen erstellt.
Natürlich empfehle ich für etwas Komplexeres die Verwendung von RQ-Scheduler oder Sellery Periodic Tasks oder Django-Q.
Aber für einfache Fälle sollte das ausreichen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3