Corrotinas (Coroutines)
Definição
Corrotinas são funções especiais que podem pausar e retomar sua execução em pontos definidos, mantendo seu estado interno entre chamadas.
Diferente das funções tradicionais, corrotinas não precisam terminar para retornar — elas podem entregar valores parciais, suspender a execução e continuar de onde pararam.
Elas são usadas para estruturar código assíncrono ou sequencial de forma não bloqueante, sendo a base para mecanismos como async/await
.
Objetivos do uso de Corrotinas
- Pausar e retomar execuções de forma eficiente e controlada.
- Evitar bloqueios em operações de I/O e redes.
- Manter o estado da função entre chamadas.
- Facilitar o controle de fluxo assíncrono e reativo, com código mais claro e sequencial.
Exemplo prático: corrotina com yield
def gerador():
yield "passo 1"
yield "passo 2"
yield "fim"
for valor in gerador():
print("Recebido:", valor)
Saída esperada
Recebido: passo 1
Recebido: passo 2
Recebido: fim
A execução pausa em cada
yield
.O gerador mantém seu estado interno até o próximo passo.
Esse tipo de corrotina, com yield
, é chamada de gerador.
Ela é útil quando se quer produzir uma sequência de valores sob demanda, sem manter tudo na memória.
Exemplo prático com async def
import asyncio
async def saudacao():
await asyncio.sleep(1)
return "Olá após 1 segundo"
async def main():
resultado = await saudacao()
print(resultado)
asyncio.run(main())
Saída esperada
Olá após 1 segundo
async def
cria uma corrotina assíncrona.await
suspende a execução até que a tarefa seja concluída.O estado da função é preservado enquanto ela "espera".
O ciclo de uma corrotina
[Chamada da corrotina]
↓
[Executa até `yield` ou `await`]
↓
[Pausa e retorna ao chamador]
↓
[Retomada posterior → continua do ponto exato]
Linguagens que usam corrotinas
- Python: com
async def
,await
,yield
- Kotlin: coroutines com
suspend
functions - Lua:
coroutine.create()
,coroutine.yield()
- C++: suporte a corrotinas nativas com
co_await
,co_yield
- C#: base do
async/await
são state machines geradas a partir de corrotinas
ℹ️ Corrotinas são especialmente poderosas para fluxos de dados contínuos, processamento incremental e programação assíncrona estruturada.