Ich habe eine Django-Website, und eine Seite hat eine Schaltfläche (oder einen Link), die beim Anklicken eine etwas lange laufende Aufgabe startet. Offensichtlich möchte ich diese Aufgabe als Hintergrundaufgabe starten und sofort ein Ergebnis an den Benutzer zurückgeben. Ich möchte dies mit einem einfachen Ansatz umsetzen, bei dem ich keine komplett neue Messaging-Architektur wie Sellery installieren und lernen muss. Ich möchte Sellerie nicht verwenden! Ich möchte nur einen einfachen Ansatz verwenden, den ich einrichten und in der nächsten halben Stunde laufen lassen kann. Gibt es nicht eine einfache Möglichkeit, dies in Django zu tun, ohne (noch) ein drittes Paket hinzufügen zu müssen?Einfacher Ansatz zum Starten der Hintergrundaufgabe in Django
Antwort
Verwenden Sie einfach ein Gewinde.
import threading
t = threading.Thread(target=long_process,
args=args,
kwargs=kwargs)
t.setDaemon(True)
t.start()
return HttpResponse()
Sehen Sie diese Frage für weitere Informationen: Can Django do multi-thread works?
Wenn Sie bereit sind, ein 3rd-Party-Bibliothek zu installieren, aber Sie wollen etwas noch viel einfacher als Sellerie Besuche Redis Queue. Es erfordert Redis, das an sich ziemlich einfach ist, aber das kann auch viele andere Vorteile bieten.
RQ selbst hat fast keine Konfiguration. Es ist erstaunlich einfach.
Referenzen:
Werfen Sie einen Blick auf django-background-tasks - es tut genau das, was Sie brauchen, und braucht daher nicht zusätzliche Dienste wie RabbitMQ oder Redis laufen. Er verwaltet eine Aufgabenwarteschlange in der Datenbank und verfügt über einen Django-Verwaltungsbefehl, den Sie einmal oder als Cron-Job ausführen können.
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/11499101) – Rao
@Rao Der Link zeigt auf ein Modul, das das Problem löst, nicht eine Beschreibung, wie das Problem zu lösen ist. Ich würde nicht wissen, wie ich den Beitrag sonst noch umschreiben könnte, vielleicht hast du ein paar Tipps? – user226114
Dieses Modul funktioniert derzeit nur mit Django 1.4 bis 1.8. – aboutaaron
- 1. Starten der Hintergrundaufgabe in UWP über DependencyService
- 2. Einfacher Ansatz zum Synchronisieren von Daten über einen Akka-Cluster?
- 3. Starten einer Hintergrundaufgabe ASP.NET MVC 4.5
- 4. DRY Ansatz für Django
- 5. Django - Signale. Einfache Beispiele zum Starten
- 6. korrekter Ansatz zum Speichern in Datenbank
- 7. Ausführen von Hintergrundaufgabe in Javascript
- 8. Djangos einfacher Login/Demo zum Download herunterladen?
- 9. Ansatz zum Daten Wrapping
- 10. Einfacher Python-Webserver zum Speichern der Datei
- 11. So starten Sie lange laufende Hintergrundaufgabe im Android-Dienst
- 12. Anzeigen einfacher HTML-Seiten DJango
- 13. Der leistungsfähigste Ansatz zum Lösen von FizzBuzz
- 14. Einfacher Python Regex zum Trennen der Wörter
- 15. Wie kann ich eine Hintergrundaufgabe auf Travis starten und stoppen?
- 16. der effiziente Ansatz zum Erzeugen von Submatrizen
- 17. So starten Sie Hintergrundaufgabe beim Booten - Windows Store-App
- 18. Was ist der beste Ansatz zum Starten eines Hintergrundthreads als Teil eines pollingDuplex-Szenerio
- 19. Windows Universal Platform: Hintergrundaufgabe zum Überprüfen von E-Mails
- 20. Einfacher Ansatz zum Zuweisen von Clustern für neue Daten nach k-Means Clustering
- 21. Der richtige Ansatz zum Entwurf einer Webanwendung (Designsoftware, keine Grafiken)
- 22. CoreLocation - Geofence-Ereignis zum Starten der Standortdienste
- 23. Visual Studio-Fehler: "Hintergrundaufgabe kann nicht aktiviert werden. Aktivierung der Hintergrundaufgabe fehlgeschlagen."
- 24. Symfony2 Hintergrundaufgabe
- 25. R - Ansatz zum Finden von Ausreißern/Artefakten in der Blutdruckkurve
- 26. Besserer Ansatz zum Schreiben Ansicht
- 27. Der beste Ansatz zum Cache Zählt aus SQL-Tabellen?
- 28. Django-Registrierung - kein Modul namens einfacher Fehler
- 29. eine endliche Länge Hintergrundaufgabe Lauf
- 30. WPF-Methode zum Starten der Anwendung Nachrichtenschleife
Sie könnten den Server einfach eine Antwort vom Typ Request Received zurückgeben lassen. Dann, wenn Polling oder WebSockets keine Option sind, muss der Server nur einen prozentualen vollständigen Wert alle 10% oder 25% aktualisieren. Und haben einen bestimmten Bereich für den Benutzer, um alle laufenden Prozesse zu überprüfen, und zeigen Sie die Prozent abgeschlossen. Auf diese Weise trifft der Browser den Server nur, wenn der Benutzer die laufende Prozessseite aufruft oder aktualisiert. Wenn ein Prozess zu 100% abgeschlossen ist, haben Sie einen Link zu den Ergebnissen. Nur ein paar Ideen. –
Hinweis: Der Server, der den Prozentabschluss aktualisiert, befindet sich nur auf dem Server [z. B. ein DB-Wert]. Dies kann abgefragt werden, wenn der Benutzer auf die angegebene Seite geht. Dies hängt auch davon ab, wie Ihre Infrastruktur gleichzeitige Verbindungen verarbeiten kann. Der laufende Prozess kann blockieren, so dass Sie möglicherweise in etwas wie Tornado suchen müssen. –
Ich bezweifel * sehr * sehr, dass alles, was du schreibst, einfacher sein wird als nur Sellerie zu installieren und damit fertig zu werden. –