Endlosschleife terminieren lassen ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
McAce
User
Beiträge: 32
Registriert: Dienstag 20. April 2010, 14:01

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
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Du kannst KeyboardInterrupt / SystemExit abfangen, http://docs.python.org/library/atexit.html anschauen oder auch das ganze Konzept überdenken.
lunar

@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.
Zuletzt geändert von lunar am Freitag 29. April 2011, 12:26, insgesamt 1-mal geändert.
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Meine Zauberkugel sagt mir, dass du Threads nicht kennst...
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

lunar: Stimmt, hab da wohl irgendwas durcheinander gebracht.
McAce
User
Beiträge: 32
Registriert: Dienstag 20. April 2010, 14:01

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).
Antworten