Problem beim Ausführen eines Zeitplans mit Flask

8

Ich muss regelmäßig eine bestimmte Aufgabe in meiner Flask-Anwendung ausführen. Ich entschied mich dafür, eine einfache Bibliothek zu verwenden - Zeitplan ( Ссылка ), um dies zu tun. Ich führe den Taskplaner in einem separaten Thread vom Hauptanwendungs-Thread aus. Hier ist das entsprechende Code-Snippet.

%Vor%

Wenn ich das hier ausführe, würde ich gerne 'Periodische Aufgabe ausführen!' um alle 10 Sekunden zu drucken. Dies ist jedoch die Ausgabe, die ich bekomme.

%Vor%

Aus irgendeinem Grund scheint die Aufgabe zweimal statt alle 10 Sekunden ausgeführt zu werden. Wenn ich jedoch nur den Taskplaner allein ausführe, anstatt ihn neben Flask auszuführen (indem ich einfach die Zeile app.run () kommentiere), wird er ordnungsgemäß ausgeführt.

%Vor%

Was könnte der Grund dafür sein? Gibt es ein Problem mit der Art, in der die Aufgaben in Warteschlange gestellt werden, wenn mehrere Threads ausgeführt werden? Es erklärt immer noch nicht, warum zwei Aufgaben zu einem Zeitpunkt geplant werden, zu dem nur einer sein sollte.

    
Pastafarian 26.11.2014, 12:34
quelle

1 Antwort

9

Wenn Sie den Entwicklungsserver mit dem Reloader ausführen (der Standard bei debug=True ), wird das Modul zweimal ausgeführt, was zu zwei Instanzen von t führt. Sie können dies überprüfen, indem Sie print(id(t)) hinzufügen.

Der einfachste Weg ist, use_reloader=False an app.run zu übergeben. Sie können diese Antwort für eine alternative Lösung sehen, mit der Sie den Reloader verwenden können.

    
dirn 26.11.2014, 13:41
quelle

Tags und Links