Threading...Brauche eine einfache Erklärung

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
Dango
User
Beiträge: 37
Registriert: Mittwoch 26. November 2008, 15:46
Kontaktdaten:

Guten Morgen Python-Forum,
ich habe eine kleine Frage:
Ich lerne gerade wie man Ereignisgesteuerte Programme schreibt.(also wie man sieht bin ich noch nicht sehr weit) Und da kam mir die Idee zu einem Programm in dem man sobald man etwas mit der Tastatur macht ODER mit der Mouse macht passiert. Das heißt ich müsste zwei Funktionen gleichzeitig laufen lassen. Dazu habe ich in Google dann dies hier gefunden: http://sunjy.de/python/threads.html
Nun dies Verstehe ich leider nicht so ganz.
Wenn ich nun die zwei Funktionen "onkey(irgendwas)" und "onklick(irgendwas) (irgendwas ist irgendeine Aktion) habe. Wie kann ich nun diese zwei Funktionen simultan laufen lassen?
Ich bedanke mich im Voraus.
MfG
Dango
ACHTUNG ANFÄNGER!! Ich entschuldige mich im Voraus für dumme Fragen :-(
BlackJack

@Dango: Die Idee von ereignisgesteuerter Programmierung ist doch gerade, dass man für so etwas Ergeignisse benutzt und eben nicht eine Funktion, die aktiv auf Tasten wartet und eine die aktiv die Maus abfragt.
Dango
User
Beiträge: 37
Registriert: Mittwoch 26. November 2008, 15:46
Kontaktdaten:

@BlackJack
Vielen Dank für die Verbesserung. Dann habe ich das falsch verstanden.
Doch es würde mich dann doch zu sehr für die Zukunft interessieren wie so etwas mit dem Threading funktioniert.
Kann mir das einer in einem extremst einfachen beispiel erklären?
ACHTUNG ANFÄNGER!! Ich entschuldige mich im Voraus für dumme Fragen :-(
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Code: Alles auswählen

>>> import thread # Thread importieren
>>> import time # Time importieren für `sleep`
>>> def test(): # Funktion, die aufgerufen wird, um Test zu sehen
	time.sleep(1) # Einen Stop des Programmablaufs für 1 Sekunde bewirken
	print "Thread!" # Nach dem Stop "Thread!" ausgeben

	
>>> def startThread(): # Funktion um Thread zu starten
	thread.start_new_thread(test, ()) # Thread wird durch das `thread` Module gestartet. 1. Parameter ist Funktion, 2. die Argumente
	print "Kein Thread!" # Ausgabe von "Kein Thread!"

	
>>> def startOhne(): # Funktion zum testen ohne Thread
	test() # Funktion mit `sleep` ausführen
	print "Kein Thread!" # Danach Text ausgeben

	
>>> startThread() # Zuerst ein Test mit Thread
Kein Thread! # "Kein Thread" wird zuerst ausgegeben, obwohl es _nach_ dem starten des Threads folgt
>>> Thread! # Dieser Text folgt 1 Sekunde später, da `sleep` Seperat ausgeführt wurde und nur für den aktuellen Thread gilt

>>> startOhne() # Dann ein Test ohne Thread
Thread! # Code wird nacheinander ausgeführt, 1 Sekunde warten, dann "Thread!" shreiben
Kein Thread! # Direkt danach folgt "Kein Thread!", da `sleep` diesmal für die komplette Python Instanz galt und deshalb alles anhielt.
Damit sollte das ganze klar werden ;)

~ Chris[/code]
Zuletzt geändert von theliquidwave am Sonntag 21. Juni 2009, 12:06, insgesamt 1-mal geändert.
Grüßle.
Dango
User
Beiträge: 37
Registriert: Mittwoch 26. November 2008, 15:46
Kontaktdaten:

@Chrisber
Vielen Vielen Dank dafür.
Doch könntest du vielleicht immer was zu den Zeilen sagen?
Ich bin leider noch ein sehr unerfahrener Anfänger und kann leder noch nicht erkennen was man sich aus manchen Ergebnissen ableiten kann.
Vielen Dank im Voraus
MfG
Dango
ACHTUNG ANFÄNGER!! Ich entschuldige mich im Voraus für dumme Fragen :-(
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Hi.
Habs mal reineditiert.
Ich hoffe du verstehst das ;P

~ Chris
Grüßle.
BlackJack

@Dango: Unerfahrene Anfänger sollten sich noch nicht mit Threads beschäftigen. Selbst erfahrene Programmierer brauchen die sehr selten. Für rechenlastige Aktionen sind sie in CPython auch nicht geeignet.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Zur Threadprogrammierung würde ich eher auf das threading-Modul verweisen. Aber wie BlackJack schon sagte, braucht man es eher selten, es kommt halt auf die Fragestellung an (zumal Python hier gewissen Einschränkungen unterliegt).

Zur Ereignissteuerung:
Da Du von onklick() gesprochen hast, schielst Du vllt. in Richtung GUI. Alle großen GUI-Toolkits bringen den nötigen Unterbau hierfür mit, ansonsten müßtest Du das Eventhandling selber schreiben.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jerch hat geschrieben:Da Du von onklick() gesprochen hast, schielst Du vllt. in Richtung GUI. Alle großen GUI-Toolkits bringen den nötigen Unterbau hierfür mit, ansonsten müßtest Du das Eventhandling selber schreiben.
Davon abgesehen dass sie ohnehin nicht threadsafe sind und daher was Threads angeht sowieso eine spezielle Behandlung benötigen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Ja threadsafe GUI ist wie real existierender Sozialismus, es scheitert an den Ressourcen und alle Räder stehen still (dead lock). :shock:
Dango
User
Beiträge: 37
Registriert: Mittwoch 26. November 2008, 15:46
Kontaktdaten:

@Chrisber Ich habe es nun theoretisch verstanden. Vielen vielen Dank.
@BlackJack Danke für den Rat. Dann werde ich mich doch lieber etwas gedulden,bevor ich noch wegen so etwas die Lust am Programmieren verliere.
@Alle
Vielen Dank!!!!
MfG
Dango
ACHTUNG ANFÄNGER!! Ich entschuldige mich im Voraus für dumme Fragen :-(
Antworten