typestar

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

  1. El productor hace put de los trabajos y luego de un centinela None.
  2. El worker itera con := hasta el centinela.
  3. gather corre ambas corrutinas juntas.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 4 de 4 en Async; paso 27 de 53 en Python pythónico.

← Anterior Siguiente →