How to Use ThreadPoolExecutor.submit() in Python

Exécute des fonctions en parallèle avec ThreadPoolExecutor.submit(), récupère les résultats avec future.result(), et traite plusieurs tâches simultanément en Python standard.

Easy Python 3.9+ Aug 9, 2026 Concurrency & performance 12 views 0 copies

Python code

18 lines
Python 3.9+
from concurrent.futures import ThreadPoolExecutor
import time

def square(n):
    time.sleep(0.1)  # Simulate work
    return n * n

if __name__ == "__main__":
    with ThreadPoolExecutor(max_workers=3) as executor:
        future = executor.submit(square, 5)
        result = future.result()
        print(f"Result: {result}")

    # Submit multiple tasks and collect results
    with ThreadPoolExecutor(max_workers=2) as executor:
        futures = [executor.submit(square, i) for i in range(1, 6)]
        results = [f.result() for f in futures]
        print(f"Results: {results}")

Output

stdout
Result: 25
Results: [1, 4, 9, 16, 25]

How it works

La méthode submit envoie une fonction et ses arguments à un file d'attente de tâches gérée par le ThreadPoolExecutor. Elle retourne immédiatement un objet Future qui vous permet de suivre l'exécution asynchrone. L'appel à future.result() bloque jusqu'à ce que la tâche soit terminée et retourne sa valeur de retour. En utilisant with, le pool de threads est automatiquement fermé après le bloc, garantissant la libération des ressources. Soumettre plusieurs tâches et appeler result() sur chaque futur dans l'ordre de soumission permet de collecter les résultats dans l'ordre d'origine.

Common mistakes

  • Oublier d'appeler `.result()` sur le Future, ce qui fait que l'exception levée dans la fonction reste invisible.
  • Utiliser `executor.map` pour des tâches indépendantes avec des arguments complexes, alors que `submit` permet plus de flexibilité.
  • Créer un nouveau pool pour chaque tâche au lieu de le réutiliser, ce qui gaspille des ressources.

Variations

  1. Utilisez `executor.map()` pour une boucle simple sur une séquence d'arguments et obtenir les résultats dans l'ordre.
  2. Utilisez `as_completed()` pour traiter les résultats dès qu'ils sont disponibles, sans attendre les plus lents.

Real-world use cases

  • Télécharger plusieurs fichiers ou pages web en parallèle et agréger les réponses.
  • Effectuer des requêtes HTTP concurrentes à une API pour réduire la latence globale.
  • Traiter un lot d'images (redimensionnement, filtres) sur un serveur avec des threads.

Sponsored

Run this sample

Open the browser IDE to tweak the example and see results without installing anything.

Open editor

More from Concurrency & performance

Related tutorials and quizzes for this topic.