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 @   天外归云  阅读(157)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
历史上的今天:
2016-10-12 一步一步教你编写与搭建自动化测试框架——python篇
2016-10-12 Auty自动化测试框架第七篇——添加动作库和常量文件库
2016-10-12 Auty自动化测试框架第六篇——垃圾代码回收、添加suite支持
点击右上角即可分享
微信分享提示