Warten auf Threads

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
Tom_at
User
Beiträge: 1
Registriert: Donnerstag 18. November 2010, 21:47

Hallo!

Bin neu bei der (Python-)Programmierung und arbeite gerade das Buch "Einstieg in Python3" durch.
Aktuell ist das Kapitel Threads dran.
Im Buch wird leider nicht beschrieben wie man auf Threads wartet.
Bsp: Ich habe ein Hauptprogramm und einen Thread. Das Hauptprogramm beginnt => der Thread wird gestartet => das Hauptprogramm läuft weiter => jetzt soll das Hauptprogramm auf das Ende des Threads warten und dann erst weitermachen.

Das funktioniert, aber ich will nicht immer "warte" stehen haben.
Wenn ich "print("warte")" entferne hängt das Programm.
Wie kann ich das eleganter lösen?

Code: Alles auswählen

import _thread, time

def ausgabe(tn):
  global weiter
  for i in range(5):
    id = _thread.get_ident()
    print(i,"Thread:",tn,"ID:",id)
    time.sleep(1)
  weiter = 1
  return

weiter = 0

#Hauptprogramm
id = _thread.get_ident()
print("Hauptprogramm:",id,"Start")

_thread.start_new_thread(ausgabe,(1,))

while weiter == 0:
  print("warte")


print("Hauptprogramm:",id,"Ende")

Danke!

Gruß
Tom
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!

Wirf mal auf die join-Methode von Threads einen Blick, damit kannst du dein Vorhaben umsetzen. Bei einem einzigen Thread kannst du dir das ganze aber eigentlich auch sparen und einfach als Funktion ausführen ;-)

Die Existenz von global möchtest du übrigens gleich wieder vergessen. Diese solltest du durch Parameter und Rückgabewerte ersetzen. Für die könnte auch noch das queue-Modul interessant sein.

Ach ja: [quote=http://docs.python.org/library/thread.html]The thread module has been renamed to _thread in Python 3.0. The 2to3 tool will automatically adapt imports when converting your sources to 3.0; however, you should consider using the high-level threading module instead.
[/code]

Sebastian
Das Leben ist wie ein Tennisball.
Antworten