¿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)
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í:
En el código actualizado, creamos una función asíncrona
stream
que toma una funcióncall_back
como entrada. Dentro de la función, utilizamos un objetoAsyncClient
para hacer la solicitud HTTP de manera asíncrona. Luego, utilizamos un bucle async para iterar sobre los bloques de respuesta utilizandoaiter_bytes()
. Para cada fragmento recibido, invocamos la funcióncall_back
de manera asíncrona utilizando la palabra claveawait
.