587 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.

16voto

user41767 Punkte 1167

Schauen Sie sich Django Poor Man's Cron an, eine Django-Applikation, die Spambots, Suchmaschinen-Indizierungsroboter und ähnliches nutzt, um geplante Aufgaben in ungefähr regelmäßigen Abständen auszuführen

Siehe: http://code.google.com/p/django-poormanscron/

11voto

Chandan Sharma Punkte 1824

Django APScheduler für Scheduler Jobs. Advanced Python Scheduler (APScheduler) ist eine Python-Bibliothek, mit der Sie Ihren Python-Code planen können, um ihn später auszuführen, entweder einmalig oder in regelmäßigen Abständen. Sie können nach Belieben neue Jobs hinzufügen oder alte entfernen.

Anmerkung: Ich bin der Autor dieser Bibliothek

APScheduler installieren

pip install apscheduler

Aufzurufende Funktion der Ansichtsdatei

Dateiname: scheduler_jobs.py

def FirstCronTest():
    print("")
    print("I am executed..!")

Konfigurieren des Zeitplaners

die Datei execute.py erstellen und die folgenden Codes hinzufügen

from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()

Ihre geschriebenen Funktionen Hier werden die Scheduler-Funktionen in scheduler_jobs geschrieben

import scheduler_jobs 

scheduler.add_job(scheduler_jobs.FirstCronTest, 'interval', seconds=10)
scheduler.start()

Verknüpfung der Datei zur Ausführung

Fügen Sie nun unten in der Url-Datei die folgende Zeile ein

import execute

11voto

Johannes Gorset Punkte 8535

Brian Neals Vorschlag, Verwaltungsbefehle über Cron laufen zu lassen, funktioniert gut, aber wenn Sie nach etwas suchen, das etwas robuster ist (aber nicht so aufwändig wie Celery), würde ich mir eine Bibliothek wie Kronos :

# app/cron.py

import kronos

@kronos.register('0 * * * *')
def task():
    pass

10voto

Ravi Kumar Punkte 1352

RabbitMQ und Celery haben mehr Funktionen und Möglichkeiten zur Aufgabenbearbeitung als Cron. Wenn das Scheitern von Aufgaben kein Thema ist und Sie davon ausgehen, dass Sie kaputte Aufgaben beim nächsten Aufruf behandeln werden, dann ist Cron ausreichend.

Sellerie & AMQP lässt Sie die abgebrochene Aufgabe bearbeiten, und sie wird von einem anderen Arbeiter erneut ausgeführt (Celery-Arbeiter warten auf die nächste Aufgabe, die sie bearbeiten sollen), bis die Aufgabe max_retries Attribut erreicht ist. Sie können sogar Aufgaben für den Fall des Scheiterns aufrufen, wie die Protokollierung des Scheiterns oder das Senden einer E-Mail an den Administrator, sobald das max_retries erreicht worden ist.

Und Sie können Celery- und AMQP-Server verteilen, wenn Sie Ihre Anwendung skalieren müssen.

8voto

Alexander Punkte 96032

Obwohl nicht Teil von Django, Luftstrom ist ein neueres Projekt (Stand: 2016), das für die Aufgabenverwaltung nützlich ist.

Airflow ist ein System zur Automatisierung und Planung von Arbeitsabläufen, das zur Erstellung und Verwaltung von Datenpipelines verwendet werden kann. Eine webbasierte Benutzeroberfläche bietet dem Entwickler eine Reihe von Optionen zur Verwaltung und Anzeige dieser Pipelines.

Airflow ist in Python geschrieben und wird mit Flask erstellt.

Airflow wurde von Maxime Beauchemin bei Airbnb entwickelt und im Frühjahr 2015 als Open Source zur Verfügung gestellt. Im Winter 2016 wurde es in das Inkubationsprogramm der Apache Software Foundation aufgenommen. Hier ist die Git-Projektseite und etwas Zusatz Hintergrundinformationen .

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