Wenn ich das Python-Programm "homeassistant" starte, kann ich in der GUI auf "beenden" (bzw. Restart) klicken. Das Programm fängt an alles zu beenden, aber dann hängt es. Wie kann ich herausfinden, wo es hängt? Das meiste ist asynchron programmiert, ein einfacher Trace wird wohl nicht funktionieren.
home assistant lässt sich nicht stoppen
Anmeldungsdatum: Beiträge: 799 Wohnort: Schwetzingen |
|
||
Projektleitung
Anmeldungsdatum: Beiträge: 12802 |
Im Debugger starten oder ihn an den Prozess anhängen (wenn das geht)? |
||
Ehemaliger
Anmeldungsdatum: Beiträge: 28954 Wohnort: WW |
Hallo,
Weil...? Warum glaubst du das? Programm via Terminl starten, schauen ob / was da geloggt wird und wenn es hängt mit STRG+C beenden. Gruß, noisefloor |
||
Projektleitung
Anmeldungsdatum: Beiträge: 12802 |
|
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 799 Wohnort: Schwetzingen |
Weil das Programm am Ende einfach mit dem Code zuende ist, aber nicht stoppt, weil irgend ein Thread noch läuft. Bei Ctrl-C hört es einfach auf. |
||
Ehemaliger
Anmeldungsdatum: Beiträge: 28954 Wohnort: WW |
Hallo,
Welche Traceback bekommst du, wenn du das Programm von der Kommandozeile startest und am Ende, wenn die GUI "hängt", STRG+C drückst? Bitte den kompletten Traceback posten, nicht nur die letzten Zeilen. Bekommst du sonst Ausgaben im Terminal, wenn das Prog läuft? Gruß, noisefloor |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 799 Wohnort: Schwetzingen |
Da kommt gar nichts. Denn es hängt ja nicht wirklich, sondern irgend ein nebenläufiger Thread hört einfach nicht auf.
Nichts auffälliges. |
||
Wikiteam
Anmeldungsdatum: Beiträge: 1288 Wohnort: Bad Oeynhausen |
Wie wäre es denn mit dem Vorschlag von rklm? strace homeassistant |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 799 Wohnort: Schwetzingen |
Das würde sicher mehrere Tage laufen. Schon ein python -m trace homeassistant.py läuft mehrere Stunden bevor er abbricht. Mit diesem Code habe ich jetzt ein bisschen was rausgefunden:
|
||
Projektleitung
Anmeldungsdatum: Beiträge: 12802 |
Du kannst ja den Prozess abbrechen, wenn er sich in der Schleife verabschiedet. Ich nutze da dieses Skript, das passende Parameter setzt und die Ausgabe gleich in Dateien in einem temporären Verzeichnis schreibt, in dem dann eine Shell geöffnet wird, nachdem der Prozess terminiert ist.
|
||
Ehemaliger
Anmeldungsdatum: Beiträge: 28954 Wohnort: WW |
Hallo,
Was hast du denn herausgefunden bzw. was willst du mit dem Codeschnipsel sagen?
Ja, aber wenn du wirklich herausfinden willst, woran es liegt, hast du halt nicht so viele Optionen. Gruß, noisefloor |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 799 Wohnort: Schwetzingen |
Mein Codeschnipsel hat rausgeschrieben, in welchem Modul und welcher Funktion der aktive Thread sich befindet. |
||
Ehemaliger
Anmeldungsdatum: Beiträge: 28954 Wohnort: WW |
Hallo,
Woher weißt du das? Vom Debugger? Von Trace? Handauflegen aufm Laptop? Der gezeigten Code kann eigentlich nur an zwei Stellen blockieren: wenn es unendlich viele Threads gäbe (ziemlich unwahrscheinlich) oder beim Gruß, noisefloor |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 799 Wohnort: Schwetzingen |
Dieser Code dient dazu rauszufinden, ob noch ein Thread aktiv ist und wenn ja, seinen Namen zu finden:
Damit konnte ich rausfinden, welcher Thread noch läuft und somit verhindert, dass das Programm enden kann. |