En Python, le GIL (Global Interpreter Lock) ne permet qu'à un seul thread d'exécuter du code Python à la fois. Si vous prenez ce code, les tâches vont s'exécuter les unes après les autres :
import time def tache_A(): print("Tâche A") time.sleep(1) def tache_B(): print("Tâche B") time.sleep(1) debut = time.time() tache_A() tache_B() print(f"Temps total : {time.time() - debut:.2f}s")
La programmation asynchrone optimise l'usage de ce thread unique. À la place de notre time.sleep(1), imaginons une requête réseau. Au lieu de bloquer l'exécution pendant le temps de réponse de la requête, les mots-clés async et await permettent de passer à une autre tâche pendant ce temps d'attente.