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.

Decorador de Clase para Función Asíncrona

Espero que el título sea autoexplicativo, aquí está el código:

class mi_clase:
    def foo(self, f):
        async def wrapper(args, *kwargs):
            return await f(args, *kwargs)
        return wrapper

inst = mi_clase()
@inst.foo
async def esto():
    print("Esto es genial")

task = asyncio.create_task(esto())

Como se puede ver, estoy tratando de ejecutar la función esto () con el decorador foo (de la clase mi_clase).

Este es el error:

Traceback (most recent call last):
File ““, line 23, in
task = asyncio.create_task(esto())
File “/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/tasks.py”, line 360, in create_task
loop = events.get_running_loop()
RuntimeError: no hay ningún bucle de eventos en funcionamiento
sys:1: RuntimeWarning: coroutine ‘mi_clase.foo..wrapper’ nunca fue esperada

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema es que no hay un bucle de eventos en ejecución. Para solucionarlo, puedes usar asyncio.run() para crear un bucle de eventos en ejecución antes de ejecutar la tarea:
    py
    asyncio.run(asyncio.create_task(this()))

Comments are closed.