Hi,
ich habe in einem Projekt eine Endlosschleife einbauen müssen, da permanent Werte in eine Datenbank geschrieben bzw ausgelesen werden. Ich kann also den Prozess nur stoppen wenn ich ihn per kill beende. Das Problem daran ist, das mir so
unter Umständen Daten verloren gehen.
Ich suche jetzt nach einer Möglichkeit das Programm "sanft" zu beenden, über eine Tastenkombination oder einen Befehl, sprich
das die letzten Werte in der Datenbank gesichert werden und dann beendet sich das Programm.
Grüße McAce
Endlosschleife terminieren lassen ?
Du kannst KeyboardInterrupt / SystemExit abfangen, http://docs.python.org/library/atexit.html anschauen oder auch das ganze Konzept überdenken.
@derdon: "SystemExit()" wird nur von innen über "sys.exit()" ausgelöst, nicht aber, wenn sich der Interpreter über ein Signal von außen (e.g. TERM) beendet. Es bringt daher in diesem Fall nichts, "SystemExit" abzufangen. "atexit" bringt bei Signalen von außen ebenfalls nichts, da der Interpreter sich nicht korrekt beendet, sofern man "SIGTERM" nicht explizit behandelt.
@McAce: Unter Unix-Systemen kannst Du auch mittels "signal" SIGTERM abfangen, und entsprechend behandeln.
@McAce: Unter Unix-Systemen kannst Du auch mittels "signal" SIGTERM abfangen, und entsprechend behandeln.
Zuletzt geändert von lunar am Freitag 29. April 2011, 12:26, insgesamt 1-mal geändert.
Danke für die Hinweise.
Ich werde mal beides versuchen also über signal und dann über Threads, wobei mir Threads noch recht neu sind das sollte
aber keine Hindernis darstellen
Grüße McAce
EDIT: wäre das denn Prinzipiell über Threads möglich?
Ich könnte mir das so vorstellen, das ein Thread (1) auf die Tatstureingabe wartet und ein anderer Thread(2) die Schleife ausführt. Wenn die Tastaureingabe erfolgt beendet (1) dann die Schleife in (2).
Ich werde mal beides versuchen also über signal und dann über Threads, wobei mir Threads noch recht neu sind das sollte
aber keine Hindernis darstellen
Grüße McAce
EDIT: wäre das denn Prinzipiell über Threads möglich?
Ich könnte mir das so vorstellen, das ein Thread (1) auf die Tatstureingabe wartet und ein anderer Thread(2) die Schleife ausführt. Wenn die Tastaureingabe erfolgt beendet (1) dann die Schleife in (2).