[本文出自天外归云的博客园]

在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}")


# 执行协程任务

程序输出: 

耗时: 6.00373545428738秒 返回: ['task 1 哦了', 'task 2 哦了']