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!

Python - Creating a Thread

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:

  1. Wir importieren das threading-Modul, das uns die Werkzeuge bietet, die wir benötigen, um mit Threads zu arbeiten.
  2. Wir definieren eine einfache Funktion print_numbers(), die Zahlen von 0 bis 4 ausdruckt, mit einer 1-Sekunden-Pause zwischen jedem Druck.
  3. Wir erstellen einen Thread mit threading.Thread(), indem wir unsere Funktion als target angeben.
  4. Wir starten den Thread mit thread.start().
  5. Das Hauptprogramm fährt fort zu laufen und druckt "Hauptthread fährt fort zu laufen".
  6. 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:

  1. Wir definieren eine NumberPrinter-Klasse, die threading.Thread erweitert.
  2. Wir überschreiben die __init__-Methode, um einen Namen für unseren Thread zu akzeptieren.
  3. Wir überschreiben die run-Methode, die aufgerufen wird, wenn der Thread startet.
  4. Wir erstellen zwei Instanzen unserer NumberPrinter-Klasse und starten sie.
  5. 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