Um desenvolvedor de software está trabalhando em uma aplicaç...
async def calcular():
Ao rodar o programa, o desenvolvedor recebeu o seguinte erro:
RuntimeError: asyncio.run() cannot be called from a running event loop
Considerando-se esse contexto, uma forma correta de chamar a função calcular é
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: A - asyncio.create_task(calcular())
Vamos explorar o contexto da questão. O desenvolvedor está utilizando **Python** e a biblioteca **asyncio** para melhorar o desempenho de uma aplicação web por meio do processamento assíncrono de transações bancárias. Uma das funcionalidades chave do asyncio é permitir que tarefas sejam criadas e gerenciadas sem bloquear o fluxo do programa. Para isso, é importante entender como iniciar e executar tarefas assíncronas corretamente.
Agora, vejamos as justificativas para cada alternativa:
Alternativa A: asyncio.create_task(calcular())
Esta é a alternativa correta. A função asyncio.create_task()
cria uma nova tarefa para executar a função assíncrona calcular()
. Isso permite que a tarefa seja agendada no loop de eventos atual sem tentar reiniciar ou interferir em loops de eventos já em execução.
Alternativa B: asyncio.run(calcular())
Esta alternativa está incorreta pois asyncio.run()
é usado para iniciar um novo loop de eventos, mas só deve ser chamado quando não há um loop de eventos em execução. O erro RuntimeError: asyncio.run() cannot be called from a running event loop
ocorre exatamente por tentar executar o run()
nesse contexto.
Alternativa C: await calcular()
Embora esta chamada seja válida dentro de uma função assíncrona, ela não pode ser usada isoladamente no escopo global ou dentro de uma função síncrona. O await
só pode ser utilizado quando já estamos dentro de um contexto assíncrono.
Alternativa D: calcular().run()
Esta alternativa está incorreta porque a chamada .run()
não é uma forma válida de executar uma coroutine em Python. Não é parte da API do asyncio.
Alternativa E: asyncio.loop.run_to_complete(calcular())
Essa alternativa também está incorreta. A API do asyncio não possui o método run_to_complete
. O método correto seria loop.run_until_complete()
, mas, assim como asyncio.run()
, ele deve ser chamado apenas quando não há um loop de eventos ativo.
Espero que essa explicação tenha ajudado a entender as nuances do uso do asyncio em Python. Gostou do comentário? Deixe sua avaliação aqui embaixo!
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo