Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Criando e Executando Corrotinas | Programação Assíncrona
Programação Estrutural em Python

Criando e Executando Corrotinas

Deslize para mostrar o menu

Para começar a trabalhar com programação assíncrona em Python, é necessário compreender as corrotinas. Uma corrotina é uma função especial definida com async def. Corrotinas permitem pausar e retomar a execução, tornando possível lidar com tarefas como operações de entrada/saída - como leitura de arquivos, requisições de rede ou consultas a bancos de dados - sem bloquear todo o programa. Isso significa que, enquanto uma tarefa aguarda dados, outras podem continuar em execução, aumentando a eficiência e a capacidade de resposta.

Para executar uma corrotina, utiliza-se asyncio.run, que inicia um loop de eventos, executa a corrotina e encerra o loop ao final. Este é o método padrão para iniciar código assíncrono no Python moderno.

Caso seja necessário executar mais de uma corrotina ao mesmo tempo, pode-se usar asyncio.gather para agendá-las concorrentemente. Isso permite que o programa inicie várias tarefas e aguarde todas terminarem, aproveitando melhor o tempo, especialmente ao lidar com operações lentas como I/O.

O código a seguir demonstra esses conceitos.

import asyncio

async def greet(name, delay):
    await asyncio.sleep(delay)
    print(f"Hello, {name}!")

async def main():
    # Schedule two coroutines to run concurrently
    await asyncio.gather(
        greet("Alice", 2),
        greet("Bob", 1)
    )

asyncio.run(main())

Resultado esperado:

Hello, Bob!
Hello, Alice!

A saudação de Bob aparece primeiro porque utiliza um atraso menor (1 segundo) do que a de Alice (2 segundos).

A coroutine greet é criada com async def, permitindo pausar a execução com await asyncio.sleep(delay) antes de exibir uma saudação. A coroutine main agenda duas instâncias de greet — uma para "Alice" com atraso de 2 segundos e outra para "Bob" com atraso de 1 segundo — utilizando asyncio.gather. Isso significa que ambas as saudações são tratadas concorrentemente, de modo que o programa não espera uma terminar para iniciar a outra. Por fim, asyncio.run(main()) inicia o loop de eventos, executa a coroutine main e garante que tudo seja finalizado corretamente. Essa abordagem permite lidar com várias tarefas que envolvem espera (como requisições de rede ou atrasos de tempo) ao mesmo tempo, tornando o programa mais eficiente e responsivo.

question mark

Qual afirmação melhor descreve como asyncio.gather agenda corrotinas?

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 2

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Seção 4. Capítulo 2
some-alt