Python - Eine Thread erstellen
Hallo, ambitionierte Python-Programmierer! Heute tauchen wir in die aufregende Welt der Threads ein. Keine Sorge, wenn du vorher noch nie von Threads gehört hast – wir beginnen bei den Grundlagen und arbeiten uns nach oben vor. Am Ende dieses Tutorials wirst du wie ein Profi Threads erstellen können!
Was sind Threads?
Bevor wir in die Erstellung von Threads einsteigen, lassen uns mal verstehen, was sie sind. Stell dir vor, du kochst ein komplexes Essen. Du machst nicht alles hintereinander – möglicherweise kochst du Pasta auf einem Kocher, während du Gemüse auf dem Schneidbrett schneidest. So funktionieren Threads in der Programmierung. Sie ermöglichen es verschiedenen Teilen deines Programms, gleichzeitig auszuführen, wodurch dein Code effizienter wird.
Threads mit Funktionen erstellen
Der einfachste Weg, um einen Thread in Python zu erstellen, ist die Verwendung einer Funktion. Beginnen wir mit einem einfachen Beispiel:
import threading
import time
def print_numbers():
for i in range(5):
print(f"Zahl {i}")
time.sleep(1)
# Einen Thread erstellen
thread = threading.Thread(target=print_numbers)
# Den Thread starten
thread.start()
print("Hauptthread fährt fort zu laufen")
# Warten, bis der Thread beendet ist
thread.join()
print("Thread ist beendet")
Lass uns das aufbrechen:
- Wir importieren das
threading
-Modul, das uns die Werkzeuge bietet, die wir benötigen, um mit Threads zu arbeiten. - Wir definieren eine einfache Funktion
print_numbers()
, die Zahlen von 0 bis 4 ausdruckt, mit einer 1-Sekunden-Pause zwischen jedem Druck. - Wir erstellen einen Thread mit
threading.Thread()
, indem wir unsere Funktion alstarget
angeben. - Wir starten den Thread mit
thread.start()
. - Das Hauptprogramm fährt fort zu laufen und druckt "Hauptthread fährt fort zu laufen".
- Wir verwenden
thread.join()
, um auf das Ende unseres Threads zu warten, bevor wir weitermachen.
Wenn du dies ausführst, wirst du sehen, dass "Hauptthread fährt fort zu laufen" sofort gedruckt wird, während die Zahlen im Hintergrund gedruckt werden. Das ist die Kraft der Threadung!
Threads durch Erweiterung der Thread-Klasse erstellen
Ein anderer Weg, um Threads zu erstellen, ist durch die Erweiterung der Thread
-Klasse. Diese Methode ist nützlich, wenn du ein wiederverwendbares Thread-Objekt erstellen möchtest. Hier ist ein Beispiel:
import threading
import time
class NumberPrinter(threading.Thread):
def __init__(self, name):
threading.Thread.__init__(self)
self.name = name
def run(self):
for i in range(5):
print(f"{self.name}: Zahl {i}")
time.sleep(1)
# Zwei Threads erstellen
thread1 = NumberPrinter("Thread 1")
thread2 = NumberPrinter("Thread 2")
# Die Threads starten
thread1.start()
thread2.start()
print("Hauptthread fährt fort zu laufen")
# Warten, bis beide Threads beendet sind
thread1.join()
thread2.join()
print("Beide Threads sind beendet")
In diesem Beispiel:
- Wir definieren eine
NumberPrinter
-Klasse, diethreading.Thread
erweitert. - Wir überschreiben die
__init__
-Methode, um einen Namen für unseren Thread zu akzeptieren. - Wir überschreiben die
run
-Methode, die aufgerufen wird, wenn der Thread startet. - Wir erstellen zwei Instanzen unserer
NumberPrinter
-Klasse und starten sie. - Beide Threads laufen gleichzeitig und drucken ihre Zahlen.
Diese Methode gibt uns mehr Kontrolle über unsere Threads und ermöglicht es uns, mehrere Instanzen leicht zu erstellen.
Threads mit der start_new_thread() Funktion erstellen
Es gibt einen dritten Weg, um Threads in Python zu erstellen, nämlich die Verwendung der start_new_thread()
-Funktion des _thread
-Moduls. Diese Methode wird jedoch als niedriges Niveau angesehen und ist für die meisten Anwendungsfälle nicht empfohlen. Hier ist ein Beispiel für Vollständigkeit:
import _thread
import time
def print_numbers(thread_name):
for i in range(5):
print(f"{thread_name}: Zahl {i}")
time.sleep(1)
# Zwei neue Threads starten
try:
_thread.start_new_thread(print_numbers, ("Thread 1",))
_thread.start_new_thread(print_numbers, ("Thread 2",))
except:
print("Fehler: Thread kann nicht gestartet werden")
# Hauptthread am Leben halten
time.sleep(6)
print("Hauptthread verlässt")
Diese Methode ist weniger flexibel und bietet nicht so viel Kontrolle wie die vorherigen Methoden. Es ist auch schwieriger, auf das Ende der Threads zu warten, wenn man diese Methode verwendet.
Vergleich der Thread-Erstellungsmethoden
Hier ist ein schneller Vergleich der drei Methoden, die wir besprochen haben:
Methode | Vorteile | Nachteile |
---|---|---|
Verwendung von Funktionen | Einfach zu implementieren, gut für Einmal-Aufgaben | Weniger wiederverwendbar, begrenzte Kontrolle |
Erweiterung der Thread-Klasse | Wiederverwendbar, mehr Kontrolle, objektorientiert | Etwas komplexer zu einrichten |
start_new_thread() | Niedriges Niveau Kontrolle | Schwieriger zu verwalten, weniger flexibel, nicht empfohlen |
Fazit
Herzlichen Glückwunsch! Du hast gerade deine ersten Schritte in die Welt der Threadung in Python gemacht. Wir haben drei verschiedene Wege zur Erstellung von Threads besprochen, die jedes ihre eigenen Vorteile und Anwendungsfälle haben. Bedenke, dass Threadung deine Programme effizienter machen kann, aber auch Komplexität einführt. Während du deinen Python-Weg fortsetzt, wirst du mehr darüber erfahren, wann und wie du Threads effektiv verwenden solltest.
Weiter üben und bald wirst du wie ein erfahrener Programmierer threaden. Happy coding!
Credits: Image by storyset