Wenn es darum geht, mehrere Aufgaben gleichzeitig in Python auszuführen, ist das Modul concurrent.futures ein leistungsstarkes und unkompliziertes Tool. In diesem Artikel erfahren Sie anhand praktischer Beispiele, wie Sie mit ThreadPoolExecutor Aufgaben parallel ausführen können.
In Python eignen sich Threads perfekt für Aufgaben, bei denen E/A-Vorgänge dominieren, wie z. B. Netzwerkaufrufe oder Lese-/Schreibvorgänge für Dateien. Mit ThreadPoolExecutor können Sie:
Sehen wir uns ein einfaches Beispiel an, um das Konzept zu verstehen.
from concurrent.futures import ThreadPoolExecutor import time # Function simulating a task def task(n): print(f"Task {n} started") time.sleep(2) # Simulates a long-running task print(f"Task {n} finished") return f"Result of task {n}" # Using ThreadPoolExecutor def execute_tasks(): tasks = [1, 2, 3, 4, 5] # List of tasks results = [] # Create a thread pool with 3 simultaneous threads with ThreadPoolExecutor(max_workers=3) as executor: # Execute tasks in parallel results = executor.map(task, tasks) return list(results) if __name__ == "__main__": results = execute_tasks() print("All results:", results)
Wenn Sie diesen Code ausführen, sehen Sie etwa Folgendes (in einer etwas parallelen Reihenfolge):
Task 1 started Task 2 started Task 3 started Task 1 finished Task 4 started Task 2 finished Task 5 started Task 3 finished Task 4 finished Task 5 finished All results: ['Result of task 1', 'Result of task 2', 'Result of task 3', 'Result of task 4', 'Result of task 5']
Aufgaben 1, 2 und 3 starten gleichzeitig, weil max_workers=3. Andere Aufgaben (4 und 5) warten, bis Threads verfügbar sind.
Begrenzen Sie die Anzahl der Threads:
Ausnahmen behandeln:
Verwenden Sie ProcessPoolExecutor für CPU-gebundene Aufgaben:
Hier ist ein Beispiel aus der Praxis: Mehrere URLs parallel abrufen.
import requests from concurrent.futures import ThreadPoolExecutor # Function to fetch a URL def fetch_url(url): try: response = requests.get(url) return f"URL: {url}, Status: {response.status_code}" except Exception as e: return f"URL: {url}, Error: {e}" # List of URLs to fetch urls = [ "https://example.com", "https://httpbin.org/get", "https://jsonplaceholder.typicode.com/posts", "https://invalid-url.com" ] def fetch_all_urls(urls): with ThreadPoolExecutor(max_workers=4) as executor: results = executor.map(fetch_url, urls) return list(results) if __name__ == "__main__": results = fetch_all_urls(urls) for result in results: print(result)
ThreadPoolExecutor vereinfacht die Thread-Verwaltung in Python und ist ideal für die Beschleunigung von I/O-gebundenen Aufgaben. Mit nur wenigen Codezeilen können Sie Abläufe parallelisieren und wertvolle Zeit sparen.
Das obige ist der detaillierte Inhalt von# Steigern Sie Ihre Python-Aufgaben mit „ThreadPoolExecutor'.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!