从异步函数中的 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
我有一个名为 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