2016-07-02 5 views
0

Ich verwende einen benutzerdefinierten Django runserver Befehl, der eine Reihe von Bereinigungsfunktionen bei Beendigung ausgeführt werden soll. Das funktioniert gut, solange ich den Autoreloader nicht benutze: vom Server fängt die KeyboardInterrupt-Ausnahme richtig ab und wird ordnungsgemäß beendet.Graceful Exit-Server bei der Verwendung von Django Autoreloader

Wenn ich jedoch Djangos Autoreloader verwende, scheint der Reloader den Server-Thread einfach zu beenden, ohne ihn ordnungsgemäß zu beenden (soweit ich das beurteilen kann, hat er dafür keine Mittel).

Das scheint inhärent unsicher, so dass ich nicht wirklich glauben kann, dass es keinen besseren Weg gibt, damit umzugehen.

Kann ich die Autoreloader-Funktionalität irgendwie nutzen, ohne dass mein Server-Thread unsauber gelöscht wurde?

+0

Ich weiß nicht, welche Art von Bereinigung du redest. Sie sollten jedoch nicht erwarten, dass sich ein Thread in der Produktion weder mit 'runserver' noch mit einem WSGI-Server ordnungsgemäß schließt. –

Antwort

1

Verwenden Sie das Modul atexit, um die Terminierung zu erfassen. Es sollte für alles funktionieren, was wie SIGINT oder SIGTERM funktioniert, SIGKILL kann nicht unterbrochen werden (aber sollte nicht von einem automatischen Neustart-Skript gesendet werden, ohne vorher SIGTERM zu senden).

+0

Großartig, danke - ich werde es versuchen. – arnuschky

+0

Das hat wunderbar mit Djangos Wiederlader funktioniert, danke! – arnuschky

Verwandte Themen