N'hésitez pas à implémenter le client http asynchrone de Python avec Trio + httpx

En Python, Trio, une bibliothèque pour le traitement asynchrone, est facile à utiliser, mais comme elle ne dispose que d'une API de couche inférieure, elle peut être assez difficile à utiliser seule. Heureusement, il existe un mode Trio dans la bibliothèque client http appelé httpx, alors j'ai essayé de l'utiliser.

Bibliothèque utilisée

https://github.com/encode/httpx

Une bibliothèque cliente http asynchrone avec une convivialité similaire à requêtes. Un mode pour Trio est également disponible. La version utilisée dans cet article à l'époque était la 0.7.8.

https://github.com/python-trio/trio

Une bibliothèque de traitement asynchrone conviviale. La version à l'époque était la 0.13.0.

code

Le code ressemble à ceci. Pour plus d'informations, veuillez lire Documentation officielle httpx.

Fondamentalement, le code ressemble à ceci.

import httpx
from httpx.concurrency.trio import TrioBackend
import trio

async def main():
    #Veuillez changer la valeur de timeout sur good
    async with httpx.AsyncClient(backend=TrioBackend(), timeout=None) as client:
        response = await client.get('https://www.example.com/')
    print(response)

trio.run(main)

Lors de l'envoi d'une demande pour le contenu d'une liste en parallèle, je pense que le code ressemblerait à ceci: Il n'y a pas d'API qui renvoie une liste comme ʻasyncio.gather`, vous devez donc la concevoir avec une fermeture. Pour plus d'informations, veuillez lire ceci Stack Overflow.

async def main():
    #Je souhaite envoyer des demandes dans une URL parallèle
    urls = ['https://www.example.com/', 'https://www.example2.com/']

    results = []
    async def _inner(client, url):
        response = await client.get(url)
        results.append(response)

    async with httpx.AsyncClient(backend=TrioBackend(), timeout=None) as client:
        async with trio.open_nursery() as nursery:
            for url in urls:
                nursery.start_soon(_inner, client, url)

    print(results)

Article de référence

Si vous voulez en savoir plus sur Trio en japonais, veuillez cliquer ici. Je ne pense pas que cela ait été transmis dans cet article, mais Trio est une bibliothèque pratique qui prend en considération la coopération avec pytest, alors veuillez l'utiliser.

Recommended Posts

N'hésitez pas à implémenter le client http asynchrone de Python avec Trio + httpx
N'hésitez pas à créer une file d'attente de tâches avec PyQS
Implémenter des sous-commandes avec l'argparse de Python
N'hésitez pas à frapper 100 sciences des données avec Google Colab et Azure Notebooks!