ThreadPoolExecutor Python

Moderne Softwareentwicklung ist stark auf Parallelität angewiesen, da sie die gleichzeitige Ausführung mehrerer Aktivitäten ermöglicht. Ein Thread-Pool-Executor ist ein wichtiges Tool zur Verwaltung der gleichzeitigen Ausführung von Aufgaben und zur Verbesserung der Leistung und Ressourcennutzung in Multithread-Programmen.

Dieser Artikel soll ein differenziertes Verständnis des Thread-Pool-Executors vermitteln.

Was ist ein Thread Pool Executor in Python?

Der Thread-Pool-Executor in Python ist ein robuster Mechanismus, der Threads effizient verwaltet und es Entwicklern ermöglicht, ihre Programme effektiv zu parallelisieren. Mit seiner Fähigkeit, Aufgabenplanung, Thread-Erstellung und Ressourcenzuweisung zu verwalten, ist der Thread-Pool-Executor von unschätzbarem Wert für die Erzielung einer optimierten Leistung.

Hauptfunktionen von Thread Pool Executor

Der Thread-Pool-Executor ist eine hochrangige Abstraktion, die auf dem Threading-Paket in Python aufbaut. Zu seinen Hauptfunktionen gehören ein Thread-Pool mit fester Größe, eine intuitive Schnittstelle zur Aufgabenübermittlung, automatische Aufgabenplanung und eine klare Trennung der Aufgabenausführung von der Verwaltung des zugrunde liegenden Thread-Pools.

Die Verwendung eines Thread-Pools mit fester Größe verhindert die Erschöpfung und Überlastung von Ressourcen, indem die Aufgaben gleichmäßig auf die verfügbaren Threads verteilt werden.

Syntax

Unten sehen Sie die Syntax des Thread-Pool-Executors:

concurrent.futures.ThreadPoolExecutor(max_workers=None, thread_name_prefix=“, initializer=None, initargs=())

In dieser Syntax:

  • Der „max_workersDer Parameter „bezieht sich auf die Anzahl der Threads oder die Poolgröße. Min (32, os.cpu_count() + 4) ist der Standardwert ab Version 3.8. Fünf dieser Threads werden für Aufgaben bereitgehalten, die E/A benötigen.
  • Ab Python 3.6 ist das „thread_name_prefixDer Parameter „wurde hinzugefügt, um Threads für einfachere Debugging-Zwecke Namen zu geben.
  • Jeder Worker-Thread ist „Initialisierer”, das ein aufrufbares Objekt akzeptiert, wird am Anfang des Threads aufgerufen. Der Initialisierer erhält ein Tupel von Argumenten im Parameter initargs.

Der „ThreadPoolExecutor” Klasse aus dem „gleichzeitige.ZukünfteDas Modul „“ wird zum Erstellen eines Threadpools verwendet. Sehen Sie sich den folgenden Codeausschnitt an:

importiere concurrent.futures

# Erstellen Sie einen ThreadPoolExecutor mit 4 Arbeitsthreads

mit concurrent.futures.ThreadPoolExecutor(max_workers=4) als Executor:

# Senden Sie eine Aufgabe zur Ausführung
Zukunft = Executor.Submit(eine_Funktion, arg1, arg2)
# …

In diesem Codeblock wird der „TestamentsvollstreckerDie Klasse wird erweitert um die Klasse „ThreadPoolExecutor”-Klasse, die ein zukünftiges Objekt zurückgibt.

Thread-Ausführungsmethoden

Drei asynchrone Thread-Ausführungsmethoden werden von „ bereitgestellt.ThreadPoolExecutor”-Klasse wie folgt:

  • einreichen(): Sendet einen Befehl zum Ausführen einer Funktion und gibt dann ein Future-Objekt zurück. Eine asynchrone Funktion wird ausgeführt durch „einreichen()“ Methode.
  • Karte(): Führt eine Funktion einmal asynchron für jedes iterierbare Element aus.
  • abschalten(): Lehnt den Executor ab.

Wenn eine neue Instanz des „ThreadPoolExecutor”-Klasse in Python erstellt wird, die „Testamentsvollstrecker“ ist gestartet. Nachdem Sie sich mit einer Ressource befasst haben, die der Executor hält, müssen Sie explizit „abschalten()“-Methode, um es freizugeben.

Ein Objekt namens „Zukunft„wird verwendet, um das Endergebnis einer asynchronen Aktion darzustellen. Der „ZukunftDer Kurs bietet die folgenden zwei praktischen Ansätze:

  • Ergebnis(): Gibt das Ergebnis einer asynchronen Operation mit result() zurück.
  • Ausnahme(): Wenn während einer asynchronen Aktion eine Ausnahme auftritt, verwenden Sie die Option „Ausnahme()“-Funktion, um die Ausnahme zurückzugeben.

So führen Sie Aufgaben mit dem Thread Pool Executor aus

Nachfolgend finden Sie den Code zum Ausführen von Aufgaben mit dem Thread-Pool-Executor:

concurrent.futures importieren

def quadrat(a):

gib eine ** 2 zurück

mit concurrent.futures.ThreadPoolExecutor(max_workers=2) als Executor:

Futures = [executor.submit(square, i) for i in range(1, 6)]

Ergebnisse = [future.result() for future in futures]

drucken(Ergebnisse)

Definieren Sie im obigen Code die „Quadrat()“-Funktion, die das Quadrat einer gegebenen Zahl bestimmt. Richten Sie mithilfe einer Listenableitung einen ThreadPoolExecutor mit zwei Arbeitsthreads ein und senden Sie zahlreiche Aufgaben aus. Die Ergebnisse jeder Aufgabe werden aus der „Zukunft”-Objekte mit dem „Ergebnis()“-Methode, die sie dann in einer Liste speichert. Drucken Sie abschließend die Ergebnisse aus.

Ausgabe

Dieses Ergebnis impliziert, dass das Quadrat der Zahlen im angegebenen Bereich entsprechend berechnet wird.

Abschluss

Der Thread-Pool-Executor in Python bietet eine leistungsstarke und flexible Lösung für die gleichzeitige Programmierung und bietet Entwicklern effizientes Ressourcenmanagement, nahtlose Aufgabenplanung und vereinfachte Fehlerbehandlung. Durch die Nutzung des Thread-Pool-Executors können Entwickler erhebliche Verbesserungen bei Leistung, Skalierbarkeit und Reaktionsfähigkeit erzielen, was ihn zu einem wichtigen Bestandteil moderner Softwaresysteme macht.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen