Sie können den asynchronen http-Client von Python mit Trio + httpx implementieren

In Python ist Trio, eine Bibliothek für die asynchrone Verarbeitung, einfach zu verwenden. Da sie jedoch nur über eine Low-Layer-API verfügt, kann die Verwendung für sich genommen recht schwierig sein. Glücklicherweise gibt es in der http-Client-Bibliothek einen Trio-Modus namens httpx, also habe ich versucht, diesen zu verwenden.

Bibliothek verwendet

https://github.com/encode/httpx

Eine asynchrone http-Clientbibliothek mit einer ähnlichen Benutzerfreundlichkeit wie Anfragen. Ein Modus für Trio ist ebenfalls verfügbar. Die zu diesem Zeitpunkt in diesem Artikel verwendete Version war 0.7.8.

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

Eine benutzerfreundliche asynchrone Verarbeitungsbibliothek. Die damalige Version war 0.13.0.

Code

Der Code sieht so aus. Weitere Informationen finden Sie in der offiziellen httpx-Dokumentation.

Grundsätzlich sieht der Code so aus.

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

async def main():
    #Bitte ändern Sie den Wert der Zeitüberschreitung in "gut"
    async with httpx.AsyncClient(backend=TrioBackend(), timeout=None) as client:
        response = await client.get('https://www.example.com/')
    print(response)

trio.run(main)

Wenn Sie parallel eine Anfrage für den Inhalt der Liste senden, würde der Code meiner Meinung nach folgendermaßen aussehen: Es gibt keine API, die eine Liste wie "asyncio.gather" zurückgibt. Sie müssen sie daher mit einem Abschluss erstellen. Weitere Informationen finden Sie unter Stapelüberlauf.

async def main():
    #Ich möchte Anfragen in paralleler URL senden
    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)

Referenzartikel

Wenn Sie über Trio auf Japanisch lesen möchten, klicken Sie bitte hier. Ich glaube nicht, dass es in diesem Artikel vermittelt wurde, aber Trio ist eine praktische Bibliothek, die die Zusammenarbeit mit pytest berücksichtigt. Bitte verwenden Sie sie.

Recommended Posts

Sie können den asynchronen http-Client von Python mit Trio + httpx implementieren
Sie können mit PyQS eine Task-Warteschlange erstellen
Implementieren Sie Unterbefehle mit Pythons Argparse
Fühlen Sie sich frei, 100 Datenwissenschaften mit Google Colab und Azure Notebooks zu schlagen!