es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python asyncio no se está ejecutando.

No soy realmente un experto de Python, así que disculpen si esto es muy obvio. Estoy tratando de ejecutar un script utilizando asyncio. Aspectos relevantes del código:

import websockets
import asyncio

stream = websockets.connect(<resource_uri>)

async def main():
    async with stream as receiver:
        while True:
            data = receiver.recv()
            # hacer cosas

if name == "main":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

Cuando lo ejecuto, obtengo:

DeprecationWarning: No hay un bucle de eventos actual
loop = asyncio.get_event_loop()

De manera similar, usando

loop = asyncio.get_running_loop()

en su lugar, obtengo

RuntimeError: no hay un bucle de eventos en ejecución.

¿Alguna idea? Supongo que tiene que ver con que main() no se está ejecutando en el hilo correcto…

Estoy utilizando Python 3.10.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el código está intentando recuperar el bucle de eventos desde el hilo equivocado.

    Intenta envolver la llamada a loop.run_until_complete(main()) dentro de un bloque if __name__ == '__main__', esto debería evitar problemas con múltiples hilos tratando de acceder al bucle de eventos:

    if __name__ == "__main__":
        loop = asyncio.get_event_loop()
        loop.run_until_complete(main())
    

    Si esto no resuelve el problema, puedes intentar llamar a asyncio.run(main()) en su lugar, lo que debería crear y cerrar automáticamente un bucle de eventos:

    if __name__ == "__main__":
        asyncio.run(main())
    

Comments are closed.