Maison >développement back-end >Tutoriel Python ># Boostez vos tâches Python avec `ThreadPoolExecutor`
Lorsqu'il s'agit d'exécuter plusieurs tâches simultanément en Python, le module concurrent.futures est un outil puissant et simple. Dans cet article, nous explorerons comment utiliser ThreadPoolExecutor pour exécuter des tâches en parallèle, ainsi que des exemples pratiques.
En Python, les threads sont parfaits pour les tâches où les opérations d'E/S dominent, telles que les appels réseau ou les opérations de lecture/écriture de fichiers. Avec ThreadPoolExecutor, vous pouvez :
Regardons un exemple simple pour comprendre le concept.
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)
Lorsque vous exécutez ce code, vous verrez quelque chose comme ceci (dans un ordre quelque peu parallèle) :
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']
Les tâches 1, 2 et 3 démarrent simultanément car max_workers=3. D'autres tâches (4 et 5) attendent que les threads soient disponibles.
Limiter le nombre de fils de discussion :
Gérer les exceptions :
Utilisez ProcessPoolExecutor pour les tâches liées au processeur :
Voici un exemple concret : récupérer plusieurs URL en parallèle.
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 simplifie la gestion des threads en Python et est idéal pour accélérer les tâches liées aux E/S. Avec seulement quelques lignes de code, vous pouvez paralléliser les opérations et gagner un temps précieux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!