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.
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.
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)
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