¿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?
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étodoregular
para ejecutar laasync_function
:En esta versión modificada de
regular
, primero obtienes el bucle de eventos utilizandoasyncio.get_event_loop()
. Luego, ejecutas laasync_function
utilizando el métodorun_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.