11 Stimmen

Planen einer regelmäßigen Veranstaltung: Cron/Cron-Alternativen (einschließlich Celery)

Ich bin daran interessiert, eine bestimmte Reihe von Aktionen in regelmäßigen Abständen durchzuführen. Offensichtlich ist dies eine Aufgabe für cron richtig?

Leider scheint sich das Internet da nicht ganz einig zu sein.

Lassen Sie mich ein wenig über meinen Aufbau erzählen. Zunächst einmal ist meine Entwicklungsumgebung unter Windows, während meine Produktionsumgebung auf Webfaction (Linux). Unter Windows gibt es kein echtes Cron, richtig? Außerdem verwende ich Django ! Und was wird für Django vorgeschlagen?

Sellerie natürlich! Leider war die Einrichtung von Celery für mich mehr oder weniger ein buchstäblicher Albtraum - siehe Fehlermeldung 'Es konnten keine Handler für den Logger "multiprocessing" gefunden werden' mit Celery . Und das ist nur EINES der Probleme, die ich mit Celery hatte. Andere schließen einen Socket-Fehler ein, wobei ich der Einzige bin, der dieses Problem jemals hatte.

Verstehen Sie mich nicht falsch, Sellerie scheint WIRKLICH cool zu sein. Leider scheint es einen Mangel an Unterstützung zu geben, und einige seltsame Einschränkungen in seine bevorzugte Backend gebaut, RabbitMQ . Leider kann ein Programm noch so cool sein, wenn es nicht funktioniert, dann funktioniert es eben nicht!

Ich hoffe, dass Sie alle dazu beitragen können. Ich würde gerne etwas über Cron oder ein Cron-Äquivalent wissen, das sowohl in einer Windows- als auch in einer Linux-Umgebung ähnlich (vorzugsweise identisch) eingerichtet werden kann.

(Ich kämpfe jetzt seit etwa zwei Wochen mit Sellerie, und leider denke ich, dass es an der Zeit ist, das Handtuch zu werfen und es aufzugeben, zumindest für den Moment).

19voto

mrmagooey Punkte 4651

Ich hatte das gleiche Problem und hielt mich mit dem Versuch zurück, es mit celery (zu kompliziert) oder cron (außerhalb der Anwendung) zu lösen, und fand schließlich Fortgeschrittener Python-Scheduler . Ich habe gerade erst angefangen, es zu benutzen, aber es scheint ziemlich ausgereift und stabil zu sein, hat eine anständige Dokumentation und akzeptiert eine Reihe von Zeitplanungsformaten (z.B. im Cron-Stil).

Desde el Dokumentation eine Funktion in einem bestimmten Intervall ausführen.

from apscheduler.scheduler import Scheduler
sched = Scheduler()
sched.start()
def hello_world():
    print "hello world"
sched.add_interval_job(hello_world,seconds=10)

Dies ist nicht blockierend, und ich führe etwas ziemlich Identisches aus, indem ich einfach das Modul aus meiner urls.py . Ich hoffe, das hilft.

12voto

Brian Neal Punkte 30564

Ein einfacher, nicht-Celery-artiger Ansatz wäre es, Folgendes zu erstellen benutzerdefinierte django-admin-Befehle um Ihre asynchronen oder geplanten Aufgaben auszuführen.

Unter Windows verwenden Sie dann die at Befehl, um diese Aufgaben zu planen. Unter Linux verwenden Sie cron .

Ich würde auch dringend empfehlen, Windows für eine Entwicklungsumgebung wegzulassen, wenn Sie können. Ihr Leben wird unter Linux oder sogar Mac OSX so viel besser sein. Nutzen Sie einen alten Rechner mit Ubuntu oder führen Sie Ubuntu in einer VM auf Ihrem Windows-Rechner aus.

1voto

Andy Baker Punkte 20369

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

Ausgelöst durch einen einzigen Cron-Task, wobei die gesamte Planung und Konfiguration in Python erfolgt.

1voto

Noel Pure Punkte 394

Django Chronograph ist eine gute Alternative. Sie müssen nur einen Cron einrichten und dann alles im Django-Admin erledigen. Sie können Aufgaben/Befehle von der Django-Verwaltung aus planen.

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