从异步函数中的 function() 产生收益 python

yield from func() in async function python

我有一个名为 get_session_ 的函数,它是一个简单的 yield 会话,然后就关闭它。

现在我使用装饰器 logger_decorator 来包装我的 get_session_ 函数但是如果我的 get_session 是异步函数就会出现问题我收到一个 TypeError: 'async_generator' object is not iterable 如果 get_session 是同步功能,一切正常。我试图解决它,但我坚持这个。

以下是我的功能:

@logger_decorator()
async def get_session_():
    session_ = SessionLocal()
    try:
        yield session_
    except Exception as e:
        print('Session rollback because of exception: %s', e)
        session_.rollback()
    finally:
        session_.close()
def logger_decorator(event_type=None, *args, **kwargs):
    def wrapper(func):
            @functools.wraps(func)
            def wrapper(*args, **kwargs):
                s_time = time.time()
                ret = yield from func()
                e_time = time.time()
                duration = e_time - s_time
                print('call function %s with duration %f' % (func.__name__, duration))
                return  ret
            return wrapper

我解决了

 async for i in func():
       result = yield i