Skip to main content
En utilisant asyncio et la bibliothèque aiohttp, vous pouvez envoyer plusieurs requêtes simultanément, réduisant considérablement le temps d’attente et améliorant le temps de réponse pour les opérations en lot.
Efficacité et ÉvolutivitéLes requêtes asynchrones permettent des opérations non-bloquantes, rendant votre application plus efficace et évolutive, surtout lors de multiples appels API simultanés.

Prérequis

  • Assurez-vous d’avoir la bibliothèque aiohttp installée : pip install aiohttp
  • Une clé API stockée de manière sécurisée, de préférence dans une variable d’environnement PARADIGM_API_KEY.

Programmation Asynchrone avec asyncio

asyncio est une bibliothèque Python qui fournit un framework pour écrire du code concurrent en utilisant la syntaxe async et await. Elle est particulièrement utile pour le code réseau structuré de haut niveau et les opérations liées aux E/S. Vous pouvez trouver plus d’informations sur Asyncio ici.

Configuration du Client HTTP Asynchrone

Pour utiliser les fonctionnalités asynchrones, utilisez aiohttp.ClientSession. Initialisez la session avec votre clé API et l’endpoint approprié.

Appels API Asynchrones

Voici comment implémenter des appels API asynchrones :
Créez une fonction async qui envoie un message à l’API et attend la réponse.
Utilisez asyncio.gather pour envoyer plusieurs requêtes simultanément. Cette fonction attend que tous les futures (opérations asynchrones) se terminent.
Utilisez asyncio.run() pour exécuter la fonction main, qui gère toutes les opérations asynchrones.

Exemple complet

Voici le code d’exemple dans son ensemble:

Comparaison avec l’Exécution Synchrone

Lors de la comparaison de l’exécution asynchrone avec l’exécution synchrone traditionnelle (séquentielle), les opérations asynchrones se terminent généralement en beaucoup moins de temps, avec un potentiel d’amélioration encore plus grand selon la longueur des différentes requêtes. Cela est particulièrement vrai pour les tâches liées aux E/S comme les requêtes API. Les gains d’efficacité de l’exécution asynchrone proviennent de sa nature non-bloquante, qui permet à d’autres tâches de continuer sans attendre que les opérations d’E/S se terminent.
Bonnes Pratiques
  • Utilisez toujours await avec les fonctions async pour éviter les erreurs d’exécution.
  • Réutilisez la même ClientSession pour plusieurs requêtes pour améliorer les performances.
  • Fermez toujours la session correctement en utilisant le gestionnaire de contexte async with.
  • Pour les notebooks Jupyter, exécutez le code asynchrone via un script Python séparé en utilisant la commande magique !python file_to_execute.py dans une cellule pour éviter les problèmes de boucle d’événements.
En incorporant des requêtes asynchrones dans votre application, vous pouvez atteindre une plus grande efficacité et évolutivité, particulièrement lors de la gestion d’un grand nombre d’appels API.

Exemple Complet de la Comparaison

Pour comparer les appels API synchrones et asynchrones dans un scénario pratique, vous pouvez utiliser l’extrait suivant. Cet extrait créera un fichier Python, speed_test.py, implémentant des requêtes API synchrones et asynchrones, respectivement. Vous pouvez ensuite exécuter ce script pour observer la différence de temps d’exécution, démontrant l’efficacité de la programmation asynchrone pour les requêtes en lot.
speed_test.py
Pour exécuter la comparaison :
  1. Exécutez l’extrait de code ci-dessus dans une cellule de notebook Jupyter pour créer speed_test.py.
  2. Exécutez le script dans le notebook Jupyter ou un terminal en utilisant la commande !python speed_test.py.
Ce script exécutera d’abord la version asynchrone, affichant le temps d’exécution total. Il exécutera ensuite la version synchrone, faisant de même. Comparer les deux temps d’exécution illustrera les gains d’efficacité réalisables avec les appels API asynchrones. Dans notre cas, nous avons obtenu la sortie suivante :

Gestion des Erreurs et Timeout

Il est important d’ajouter une gestion robuste des erreurs pour les appels API asynchrones :

Conclusion

Exploiter les requêtes API asynchrones via aiohttp peut considérablement améliorer les performances et l’évolutivité des applications. Comme démontré, l’exécution asynchrone peut être presque 5 fois plus rapide que les méthodes synchrones, offrant des gains d’efficacité significatifs. Cette approche est essentielle pour gérer des interactions API à haut volume, garantissant l’efficacité des applications.