es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se transmiten los datos de forma asíncrona en Python con httpx?

En el enlace https://zetcode.com/python/httpx/, se encuentra el siguiente ejemplo para la transmisión continua:

import httpx

url = 'https://download.freebsd.org/ftp/releases/amd64/amd64/ISO-IMAGES/12.0/FreeBSD-12.0-RELEASE-amd64-mini-memstick.img'

with open('FreeBSD-12.0-RELEASE-amd64-mini-memstick.img', 'wb') as f:
with httpx.stream('GET', url) as r:
for chunk in r.iter_bytes():
f.write(chunk)

¿Hay alguna manera de transmitir los datos de manera asíncrona? Por ejemplo:

async def stream(call_back):
async with httpx.stream('GET', url) as r:
for chunk in await? r.iter_bytes():
await call_back(chunk)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible transmitir los datos de manera asíncrona utilizando el código de ejemplo proporcionado. El código se puede modificar para utilizar la sintaxis de async/await y la función call_back se puede invocar para cada fragmento de datos recibido. El código actualizado puede verse así:

    import httpx
    
    async def stream(call_back):
        url = 'https://download.freebsd.org/ftp/releases/amd64/amd64/ISO-IMAGES/12.0/FreeBSD-12.0-RELEASE-amd64-mini-memstick.img'
    
        async with httpx.AsyncClient() as client:
            async with client.stream('GET', url) as r:
                async for chunk in r.aiter_bytes():
                    await call_back(chunk)
    

    En el código actualizado, creamos una función asíncrona stream que toma una función call_back como entrada. Dentro de la función, utilizamos un objeto AsyncClient para hacer la solicitud HTTP de manera asíncrona. Luego, utilizamos un bucle async para iterar sobre los bloques de respuesta utilizando aiter_bytes(). Para cada fragmento recibido, invocamos la función call_back de manera asíncrona utilizando la palabra clave await.

Comments are closed.