我有一个异步查询列表,我正在用asyncio.gather()
&用CCD_ 2等待。类似于:
queries = [
async_query_a(),
async_query_b()
]
loop = asyncio.get_event_loop()
tasks = asyncio.gather(*queries)
results = loop.run_until_complete(tasks)
我想知道";等待时间";对于每个查询。类似于@log_performance包装器,它记录未来/coroutine完成的经过时间。
这里是timecoro
计时协程函数的一个示例实现。
import asyncio
import functools
import logging
import random
import time
def timecoro(corofn):
@functools.wraps(corofn)
async def wrapper(*args, **kwargs):
start = time.time()
try:
result = await corofn(*args, **kwargs)
except Exception:
finish = time.time() - start
logging.info('%s failed in %.2f', corofn, finish)
raise
else:
finish = time.time() - start
logging.info('%s succeeded in %.2f', corofn, finish)
return result
return wrapper
@timecoro
async def async_query_a():
await asyncio.sleep(random.randint(0, 4))
@timecoro
async def async_query_b():
await asyncio.sleep(random.randint(0, 4))
raise RuntimeError
async def main():
queries = [
async_query_a(),
async_query_b(),
]
await asyncio.gather(*queries)
if __name__ == '__main__':
logging.basicConfig(level='INFO')
asyncio.run(main())