RuntimeError: esse loop de eventos já está sendo executado em python

Acho que estou recebendo esse erro porque meu código chamaasyncio.get_event_loop().run_until_complete(foo()) duas vezes. Uma vez defoo() e segunda vez da função chamada porfoo(). Minha pergunta é então: por que isso deveria ser um problema? Por que eu deveria me importar se esse loop está sendo executado?

Houve uma edição feita a esta pergunta que, penso eu, a ocultou (algumas pessoas preferem seguir regras sem entendê-las, portanto, uma palavra "ilegal" foi removida do título). Infelizmente, isso cria confusão.

Não estou surpreso com o fato de o erro ser gerado. Eu posso rastreá-lo até oasyncio fonte e veja que os autores desta biblioteca queriam fazer dessa maneira, não há mistério lá. A parte intrigante é a razão pela qual os autores da biblioteca decidiram que é ilegal solicitar que o loop de eventos execute alguma função até a conclusão quando o loop já estiver em execução.

Podemos reduzir o problema para apenas duas dessas chamadas e, através da análise de casos, veremos que essas são as três possibilidades:

Nenhuma das duas funções é finalizada.Uma das funções termina eventualmente.Ambas as funções terminam.

Agora, existe algum comportamento sensato que abordaria todos os três casos? Para mim, é óbvio que existem, ou talvez haja vários comportamentos sãos possíveis aqui. Por exemplo:

Nada de especial, a execução de ambas as funções é intercalada e elas continuam funcionando para sempre, exatamente como esperado.O loop não retorna o controle para o código após a primeira instância derun_until_complete() até a segunda função ser concluída (portanto, nenhum código apósrun_until_complete() será executado.Depois que a última função termina, o loop retorna o controle para o primeiro objeto de código que invocourun_until_complete ignorando todos os outros sites de chamada.

Agora, eu posso entender que esse comportamento pode não ser algo que todo mundo gostaria. Mas, como essa biblioteca decidiu dar aos programadores controle sobre o início / parada do loop de eventos, ela também deve atender às conseqüências de tais decisões. Cometer um erro ao iniciar o mesmo loop várias vezes, impede que o código da biblioteca faça isso, o que reduz a qualidade e a utilidade das bibliotecas que utilizamasyncio (que é realmente o caso, por exemplo,aiohttp)

questionAnswers(1)

yourAnswerToTheQuestion