Python: Skript aus Thread komplett beenden

OP #6520368
Lesenswert?
• ▲
▼
Hallo Zusammen,

ich möchte mit zyklischen Aufrufen von einem TCP-Server
ein paar Werte als String abholen.
Das ganze läuft auf einem Raspi und Threading.

Ein Instanz einer Klasse welche die Funktion-"foo" zum
Abholen der Daten ausführt. (siehe Anhang)
Das Ganz funktioniert gut.

Wenn der Server nicht erreichbar ist, scheitert connect
mit der Exception "OSError" und bricht die Funktion ab.

Mein Problem:
Ich möchte, dass der Hauptthread diese "inner-Exception"
mitbekommt und das ganze Skript mit allen laufenden Threads
sauber beendet...

Alle meine Versuche führen dazu, das sich Exceptions gegenseitig auf die 
Füße treten.

Wie krieg ich den "gracefully shutdown" hin, ohne das etwas 
hängenbleibt.
Meine Python-Kenntnisse sind wirklich nicht gut...

Viele Grüße
Runout
Angehängte Dateien:
#6520404
Lesenswert?
• ▲
▼
Hi, Threads sind kooperativ, es gibt keine Built-In-Lösung die zu 
beenden. Der Grund dafür ist, dass nicht vorhersehbar ist, in welchem 
Zustand dein Programm danach sein wird.

Du brauchst also irgendwelche Kommunikation zwischen deinen Threads, die 
du dir selbst bauen musst. Das können Events sein oder Member eines 
Objekts auf das alle Threads eine Referenz haben oder globale Variablen, 
aber du musst selbst irgendwas bauen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.