2017-05-17 12 views
0

Ich arbeite an einem Flaschenrahmen, der versucht, einen Job zu planen, der in 30 Minuten vom Mittagessen ausgelöst wird und nur einmal passieren wird.Wie plane ich zeitgesteuerte Ereignisse in Python Flask?

habe ich versucht, mit threading.Timer zu arbeiten, aber da mein Job eine REST-Anfrage ruft ich Runtime bekommen: ‚arbeiten außerhalb des Anforderungskontext‘, die ich konnte einfach nicht lösen.

Von diesem Thread, verstehe ich, dass es das Einfädeln Modul auf einem Kolben-Server wird nicht empfohlen: How do you schedule timed events in Flask?

So eine Lösung für einen zeitgesteuerte Trigger Job (die nicht auf ich bin auf der Suche funktioniert Intervalle).

Es sieht so aus, als ob APscheduler intervallbasiert sein muss.

Ich wäre dankbar für jede Hilfe.

+1

Versuchen Sie, Sellerie zu verwenden. – stamaimer

+0

Hey, Ich denke, mein Problem ist vielleicht anders, weil das Erstellen eines neuen Threads ohne Timer auch zum selben RunTimeError führt. Es scheint, dass beim Erstellen eines neuen Threads kein App-Kontext oder Anforderungskontext abgerufen wird. Ich habe es geschafft, den App-Kontext als Parameter an den neuen Thread zu übergeben; jedoch gibt es immer noch keinen Anfragekontext, und die Ausnahme wird ausgelöst, wenn versucht wird, eine Anfrage zu erreichen. Ist es möglich, eine Anfrage zu generieren, oder sollte ich sie auch weitergeben? Danke :) – Lito26

+0

http://flask.pooco.org/docs/0.12/patterns/sellery/ – stamaimer

Antwort

1

Die Apscheduler add_job Methode kann einen date Auslöser, mit dem Sie tun können, was Sie wollen.

Pro-Tipps:

Wenn Sie apscheduler in Ihrem Kolben App-Prozess verwenden, wenn gehen in die Produktion mit einem wsgi Server wie gunicorn oder uwsgi Sie mit Ihrer Arbeit Hand nach oben wird mehrere Zeit (eine für die jeweils laufen Kolbenarbeiter).

Wenn dieses Problem auftritt, hat die Option gunicorn --preload es nicht für mich geschnitten.

So:

  • Sie können flaschen apscheduler mit seinem Rest Server-Ansatz verwenden, wenn diese zu Ihnen passt.
  • Oder trennen die apscheduler in einen Dämon und
    • Verwendung uwsgi mules,
    • oder nur den Web-App läuft halten gunicorn und verwendet Supervisor das Scheduler-Daemon zu starten.
    • oder verwenden Sie this Lösung mit einer Steckdose, die ein wenig schmutzig ist, aber den Vorteil hat, einfach zu sein.

IMHO die Trennung von gunicorn/Kolben und apscheduler in zwei Teil und die Verwendung von Supervisor ist die sauberste noch nicht so komplexe Lösung.

Verwandte Themen