使用asyncio.gather()的协同程序/期货的运行时间



我有一个异步查询列表,我正在用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())

最新更新