585 Stimmen

Einen geplanten Auftrag einrichten?

Ich habe an einer Webanwendung mit Django gearbeitet, und ich bin neugierig, ob es eine Möglichkeit gibt, einen Job zu planen, der regelmäßig ausgeführt wird.

Im Grunde möchte ich nur durch die Datenbank laufen und einige Berechnungen/Aktualisierungen auf einer automatischen, regelmäßigen Basis machen, aber ich kann nicht scheinen, um jede Dokumentation zu finden, dies zu tun.

Weiß jemand, wie man das einrichtet?

Zur Klarstellung: Ich weiß, dass ich eine cron Job, dies zu tun, aber ich bin neugierig, wenn es eine Funktion in Django, die diese Funktionalität bietet. Ich möchte, dass die Leute in der Lage sein, diese Anwendung selbst bereitstellen, ohne viel zu konfigurieren (vorzugsweise Null).

Ich habe in Erwägung gezogen, diese Aktionen "rückwirkend" auszulösen, indem ich einfach prüfe, ob ein Auftrag seit dem letzten Mal, als eine Anfrage an die Website gesendet wurde, ausgeführt werden sollte, aber ich hoffe auf eine etwas sauberere Lösung.

404voto

Brian Neal Punkte 30564

Eine Lösung, die ich angewandt habe, ist diese:

1) Erstellen Sie eine benutzerdefinierter Verwaltungsbefehl z.B.

python manage.py my_cool_command

2) Verwendung cron (unter Linux) oder at (unter Windows), um meinen Befehl zu den gewünschten Zeiten auszuführen.

Dies ist eine einfache Lösung, die keine Installation eines umfangreichen AMQP-Stacks erfordert. Es gibt jedoch nette Vorteile bei der Verwendung von etwas wie Celery, die in den anderen Antworten erwähnt wurden. Insbesondere ist es mit Celery schön, dass man seine Anwendungslogik nicht in Crontab-Dateien verteilen muss. Allerdings funktioniert die Cron-Lösung ganz gut für eine kleine bis mittelgroße Anwendung, bei der man nicht viele externe Abhängigkeiten haben möchte.

EDITAR:

In späteren Versionen von Windows wird die at ist für Windows 8, Server 2012 und höher veraltet. Sie können verwenden schtasks.exe für die gleiche Verwendung.

**** UPDATE **** Dies ist die neue Link von django doc für das Schreiben des benutzerdefinierten Verwaltungsbefehls

172voto

dln Punkte 1789

Sellerie ist eine verteilte Aufgaben-Warteschlange, die auf AMQP (RabbitMQ) basiert. Sie bearbeitet auch periodische Aufgaben in einer Cron-ähnlichen Weise (siehe periodische Aufgaben ). Je nach Anwendung könnte sich ein Blick darauf lohnen.

Celery ist ziemlich einfach mit django einzurichten ( docs ), und periodische Aufgaben überspringen verpasste Aufgaben im Falle einer Ausfallzeit. Celery hat auch eingebaute Wiederholungsmechanismen für den Fall, dass eine Aufgabe fehlschlägt.

55voto

chachra Punkte 751

Wir haben das, was ich für eine strukturierte Anwendung halte, auf die Brians obige Lösung anspielt, als Open Source zur Verfügung gestellt. Wir würden uns über jedes/alle Feedback freuen!

https://github.com/tivix/django-cron

Es wird mit einem Verwaltungsbefehl geliefert:

./manage.py runcrons

Damit ist die Sache erledigt. Jeder Cron ist als Klasse modelliert (also alles OO) und jeder Cron läuft mit einer anderen Frequenz und wir stellen sicher, dass derselbe Cron-Typ nicht parallel läuft (für den Fall, dass die Crons selbst mehr Zeit benötigen, als ihre Frequenz!)

37voto

S.Lott Punkte 371691

Wenn Sie ein Standard-POSIX-Betriebssystem verwenden, benutzen Sie cron .

Wenn Sie Windows verwenden, benutzen Sie unter .

Schreiben Sie einen Django-Verwaltungsbefehl für

  1. Finden Sie heraus, auf welcher Plattform sie sich befinden.

  2. Entweder führen Sie den entsprechenden "AT"-Befehl für Ihre Benutzer aus, oder Aktualisieren Sie die Crontab für Ihre Benutzer.

23voto

Van Gale Punkte 42727

Interessante neue steckbare Django-Anwendung: django-chronograph

Sie müssen nur einen Cron-Eintrag hinzufügen, der als Timer fungiert, und Sie haben eine sehr schöne Django-Admin-Oberfläche für die auszuführenden Skripte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X