协程asyncio入门案例 1

协程概念

协程,也可以称为微线程,是一种用户态内的上下文切换技术。通过一个线程实现代码块相互切换执行。

协程(Coroutine)是一种比线程更轻量级的并发编程模型,它允许程序在执行过程中暂停并在稍后恢复执行。协程的特点包括:

非抢占式调度:协程的切换由程序自身控制,而不是由操作系统调度。

单线程内并发:多个协程可以在一个线程内并发执行,通过 await 关键字主动让出控制权。

高效资源利用:相比多线程,协程避免了线程上下文切换的开销,适合高并发场景。

async 关键字

作用:用于定义一个协程函数(coroutine function)。

特点:

被 async 修饰的函数在调用时不会立即执行,而是返回一个协程对象(coroutine object)。

协程函数内部可以使用 await 关键字来挂起执行,等待异步操作完成。

await 关键字

复制代码
遇到IO操作时,自动切换到其他任务

作用:用于挂起当前协程的执行,等待一个可等待对象(awaitable)完成。
可等待对象包括:
协程对象(由 async def 定义的函数返回)
asyncio.Future 对象
asyncio.Task 对象
特点:
只能在 async 函数内部使用。
执行到 await 时,当前协程会让出控制权,事件循环可以调度其他任务执行。
等待的对象完成后,协程会从挂起点继续执行。

案例

执行时间间 3.0046963691711426,100个任务3秒时间,单线程高并发效果。如果是串行执行时间需要300秒,执行时间性能提升了100倍。

复制代码
import asyncio
import time

start_time = time.time()


async def get_img():
    # 示例协程函数
    print("Fetching image...")
    await asyncio.sleep(3)  # 遇到IO操作时,自动切换到其他任务
    return "Image"
    print("Image fetched.")


async def main():
    tasks = [asyncio.create_task(get_img()) for _ in range(100)]  # 包装为任务
    await asyncio.wait(tasks)  # 等待所有任务完成


# 启动事件循环并运行主函数
asyncio.run(main())
end_time = time.time()
print("执行时间", end_time - start_time)
相关推荐
cpolar技术支持12 小时前
requirements.txt 能安装不等于安全:用 pip-audit 检查 Python 依赖,cpolar 临时分享脱敏报告
python·cpolar·requirements·依赖安全·pip-audit
大牧师12 小时前
Nest.js 微服务入门教程
开发语言·javascript·后端·微服务·node.js·nest.js·nest
格林威12 小时前
C# 图像异步落盘存储:基于Channel 配合 ArrayPool 实现异步落盘
开发语言·人工智能·数码相机·机器学习·计算机视觉·c#·视觉检测
软件黑马王子12 小时前
11.缓存池优化:窗口布局
开发语言·前端框架·c#
深圳市益普科技有限公司12 小时前
半导体MES的数字孪生:虚拟调试如何把上线风险提前清零
java·开发语言
低代码布道师12 小时前
外包项目管理平台全栈实战课02搭建数据底座:Next.js + PostgreSQL + Prisma 7
开发语言·javascript·postgresql·全栈开发
格林威12 小时前
C# 图像使用AVX2指令集:使用OpenCvSharp实现字节图像解压缩速度和map_image算子速度提升
开发语言·图像处理·人工智能·计算机视觉·c#·视觉检测·工业相机
测试199812 小时前
Jmeter接口自动化生成测试报告html格式详解
自动化测试·python·测试工具·jmeter·职场和发展·测试用例·接口测试
pjj1985412 小时前
Hadoop-python中使用大数据
大数据·hadoop·python