1. Introducción
El event loop es el organizador de las tareas que se ejecutan dentro de é.
El event loop normalmente se crea desde un una función síncrona con asyncio.run()
def funcion_sync(): resultado = asyncio.run(mi_funcion_async()) print(resultado)
2. Entornos FastAPI (como FastHTML)
En este caso ya se ha creado un event loop. Para ello lo mas normal es utilizar funciones asíncronas.
Los puntos de partida para llamadas a las funciones suelen ser los "endpoints"(o urls) y conviene definirlas como asíncronas:
@app.post("/softprop/validate_login")
async def post_login(req, login: xmclasses.Login):
''' 1. Verifica usuario y contraseña ''' ldap_authenticated= await xmldap.autheticate_by_login(login.usuari, login.paraula_de_pass) if not ldap_authenticated: print ("returning to first login page") return fh.Div("Error en l'usuari o la paraula de pas", cls="alert alert-danger")
Pero puede haber casos que "recojamos el event loop con asyncio.get_event_loop() y ejcutemos funciones dendro de él con asyncio.run_coroutine_threadsafe() y recogiendo el resultado con .result() .
import asyncio loop = asyncio.get_event_loop() future = asyncio.run_coroutine_threadsafe(mi_funcion_async(), loop) resultado = future.result()
No hay comentarios :
Publicar un comentario