Python3.7之后使用协程进行并发编程更加容易

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

在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 哦了']

posted @ 2022-10-12 15:01  天外归云  阅读(30)  评论(0编辑  收藏  举报