Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

python und threads (threading.Thread)

2 views
Skip to first unread message

Mathias Panzenboeck

unread,
Apr 20, 2007, 3:21:25 PM4/20/07
to
Hi.

Ich hab am 26. einen Test bei dem wir u.a. Pseudocode der
verschiedene Threads synchronisiert schreiben werden müssen.
Dazu übe ich mit Angaben von alten Tests und schreib das gleich
in Python zum Testen. Hab schon einiges programmiert und hab alles
bis jetzt richtig zum Laufen gebracht.

Aber bei einen Bsp hab ich ein Problem:
Aus irgendeinen Grund gehn mir die Threads aus.
Es ist so das ich viele kurze Threads habe. Es werden immer mehr
in einer Endlosschleife erzeugt, aber sie sollten alle recht schnell
fertig sein. Das Problem ist aber, das anscheinend manche nie fertig
werden. Hab kA warum. Hab auch schon thread.exit() an's Ende der run()
Methoden geschrieben, hilft aber nix. (ist wohl auch nicht notwendig)
Die Programmlogik bräuchte theoretisch nur 2 gleichzeitig aktive
Threads, profitiert aber von mehr, wenn's geht.

Hier hab ich das Bsp:
http://twoday.tuwien.ac.at/pub/files/2003.10.29-bsp1

Angabe ist das Bsp1 aus dem Test:
http://www.vmars.tuwien.ac.at/courses/betriebssysteme/alte_pruefungsangaben/20031029.ps

Hat irgendwer eine Idee was da sein kann? Hab ich da echt wo einen
Deadlock? Wie kann ich sowas debuggen? Oder räumt Python aus irgendeinen
anderen Grund die Thread Objekte nicht auf?

Ich wäre für Tipps sehr Dankbar! :)


MfG,
panzi

Marc 'BlackJack' Rintsch

unread,
Apr 21, 2007, 4:21:18 AM4/21/07
to
In <462912a2$0$12126$3b21...@tunews.univie.ac.at>, Mathias Panzenboeck
wrote:

Mir ist das Beispiel ein bisschen zu lang um's durchzugehen, aber gleich
am Anfang fällt etwas auf: Du implementierst `__del__()` was dazu
führt, dass Python die Objekte im "garbage collector" nicht mehr
berücksichtigt wenn Du mit diesen `Daemon`-Objekten irgendwo zyklische
Abhängigkeiten baust.

Lies Dir mal in der Doku durch was bei `__del__()` garantiert wird, bzw.
was alles *nicht* garantiert wird. Als Methode für Code zum
zuverlässigen "Aufräumen" ist `__del__()` absolut nicht geeignet.

Ciao,
Marc 'BlackJack' Rintsch

Mathias Panzenboeck

unread,
Apr 21, 2007, 9:26:40 AM4/21/07
to
Marc 'BlackJack' Rintsch schrieb:


Ich hab __del__ erst implementiert als ich schon das entsprechende Verhalten
bemerkt hab um mit zu zählen. Aber ich hab eben keine zyklische Abhängigkeiten.
Die Threads greifen nur auf ein paar globale Variablen (Semaphore, Locks, ...)
zu, das ist alles. Bräuchte dafür netmal Klassen, eigentlich, es würden
Funktionen die ich mit start_new_thread threade reichen. Aber wenn ich von
Thread ableite kann ich self.setDaemon(True) machen, was zur Folge hat, dass das
Programm beendet wenn der Main Thread beendet.

Trotzdem Danke,
panzi

0 new messages