[本文出自天外归云的博客园]
在python3.7之后,async和await关键字的使用变得更加容易。
async和await总是成对出现,async定义协程任务,await等待协程任务完成。
代码如下:
import asyncio import time # 定义单个协程任务 async def my_task(any_str, use_duration): # 这里不能使用 time.sleep 因为 time.sleep 方法是同步的 # 如果用 time.sleep 则多个任务的 sleep 耗时会叠加在一起 # 用 asyncio.sleep 方法则可以模拟异步方法的耗时 await asyncio.sleep(use_duration) return f"{any_str} 哦了" # 组装多个协程任务合并为一个协程任务 async def run_task(): # 计算开始时间 start_time = time.perf_counter() # 创建异步协程任务 task1 = my_task("task 1", 6) task2 = my_task("task 2", 3) # 等待异步协程任务执行完成 # 数组 r 中包含了 task1 和 task2 的函数 return 值 r = await asyncio.gather(task1, task2) # 计算结束时间 end_time = time.perf_counter() # 计算异步协程任务的执行耗时 # 约等于且稍稍大于最耗时的协程任务执行耗时 print(f"耗时: {end_time-start_time}秒 返回: {r}") # 执行协程任务 asyncio.run(run_task())
程序输出:
耗时: 6.00373545428738秒 返回: ['task 1 哦了', 'task 2 哦了']