Colas de asyncio en Python
Un productor y un consumidor compartiendo una cola asíncrona.
import asyncio
async def productor(cola):
for trabajo in ["redimensionar", "codificar", "subir"]:
await cola.put(trabajo)
await cola.put(None) # centinela
async def trabajador(cola, hechos):
while (trabajo := await cola.get()) is not None:
hechos.append(trabajo)
async def principal():
cola, hechos = asyncio.Queue(), []
await asyncio.gather(productor(cola), trabajador(cola, hechos))
return hechos
terminados = asyncio.run(principal())
Cómo funciona
- El productor hace
putde los trabajos y luego de un centinelaNone. - El worker itera con
:=hasta el centinela. gathercorre ambas corrutinas juntas.
Palabras clave y builtins usados aquí
asyncawaitdefforreturnwhile
El intento, en números
- Líneas
- 20
- Caracteres a escribir
- 444
- Tokens
- 118
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 64 segundos.
Paso 4 de 4 en Async; paso 27 de 53 en Python pythónico.