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.

¿Cómo se ejecuta una función asíncrona dentro de una función regular?

Esto es para un bot de Discord que estoy creando, utilizando la API de discord.py en el cual básicamente todo se hace en estas funciones asíncronas.

Digamos que tengo un método asíncrono que se ve así:

async def async_function():
    await something()

y un método regular en el cual me gustaría ejecutar la función asíncrona:

def regular():
   if condition:
      async_function()

¿Puedo ejecutar el método asíncrono en un método regular y, si puedo, cómo?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, puedes ejecutar un método asíncrono en un método regular utilizando el módulo asyncio.

    Para hacerlo, necesitas crear un bucle de eventos y ejecutar el método asíncrono dentro de él utilizando el método run_until_complete. Aquí tienes un ejemplo de cómo podrías modificar el método regular para ejecutar la async_function:

    import asyncio
    
    async def async_function():
        await something()
    
    def regular():
       if condition:
          loop = asyncio.get_event_loop()
          loop.run_until_complete(async_function())
    

    En esta versión modificada de regular, primero obtienes el bucle de eventos utilizando asyncio.get_event_loop(). Luego, ejecutas la async_function utilizando el método run_until_complete del bucle de eventos, lo cual bloqueará hasta que la función asincrónica esté completa.

    Ten en cuenta que debes crear solo un bucle de eventos por hilo y evitar crear bucles de eventos anidados.

Comments are closed.