简单聊一下 Python 协程

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益:

  1. 了解大厂经验
  2. 拥有和大厂相匹配的技术等

希望看什么,评论或者私信告诉我!

一、前言

最近见了很多类似于这样的代码

python 复制代码
async def log_requests(request: Request, call_next):
    # log the request
    print(f"Received request: {request.method} {request.url}")
    # call the next middleware or request handler
    response = await call_next(request)
    # log the response
    print(f"Sent response: {response.status_code}")
    return response

所以是时候聊一聊 Python 的协程了

二、协程

2.1 协程是什么

协程在一个线程内执行,不需要创建额外的线程或进程,是一种轻量级的并发编程模型,它允许在程序执行过程中暂停和恢复执行,从而实现异步和并发操作。

graph TD 进程 --> 线程 --> 协程

协程是运行在线程里面的,一个线程可以运行多个协程。线程是运行在进程里面的,一个进程可以运行多个线程

2.2 为什么需要协程

最初的目的是为了满足 互联网和连接的增长引发了对响应式和可扩展代码的需求,另外也使 Python 在处理异步编程时,更加简单和高效。

同时也可以解决Python在处理异步编程时的一些问题,比如:传统的多线程编程模型在处理大量并发任务时存在一些困难和限制,包括线程切换开销、共享数据的同步与互斥等问题。协程提供了一种更轻量级、更高效的方式来处理并发任务。

2.3 创建协程

通过 async/await 语法来声明 协程 是编写 asyncio 应用的推荐方式。比如

python 复制代码
async def log_requests(request: Request, call_next):
    response = await call_next(request)
    return respons

2.4 协程优势

协程在异步编程中的主要优势包括:

  1. 轻量级和高效性:协程在一个线程内执行,避免了线程切换的开销,因此具有较小的资源消耗和高效的执行速度。
  2. 简化并发编程:协程提供了一种更直观、顺序化的编程模型,使得编写并发代码更加简单和易于理解。它们避免了传统并发编程中的锁、条件变量等复杂的同步机制。。
  3. ** 可读性和维护性**:协程使用特殊的语法和关键字,使得编写并发代码更加直观和易于理解。协程可以将复杂的并发逻辑以顺序化的方式组织起来,提高代码的可读性和维护性。
  4. 避免竞态条件:由于协程在一个线程内执行,不存在多线程并发访问共享数据的竞态条件问题。协程可以通过暂停和恢复执行来避免并发访问共享数据时的同步问题。
  5. 统一的编程模型 :asyncio提供了一个统一的异步编程框架,可以处理多种类型的异步任务,如网络通信、文件操作、并发任务等。这使得开发者可以使用相同的编程模型来处理不同的异步场景,提高了代码的复用性和可扩展性。

2.5 使用场景

首先我们应该明确 Python 协程并没有解决 全局解释器锁 带来的问题。因此协程无法充分利用多核处理器的优势,但在I/O密集型任务的场景下,协程的性能通常优于使用线程,因为协程能够更高效地利用等待I/O的时间。

三、总结

本文详细介绍了Python中的协程概念及其在异步编程中的应用。协程是一种轻量级的并发编程模型,通过在一个线程内执行,避免了线程切换的开销,具有较小的资源消耗和高效的执行速度。协程提供了一种直观、顺序化的编程模型,简化了并发编程,并提高了代码的可读性和维护性。协程在处理I/O密集型任务时表现出色,并且通过暂停和恢复执行避免了竞态条件的问题。Python的asyncio模块提供了对协程的支持,并提供了一个统一的异步编程框架。协程在现代异步编程中具有重要的作用。

相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
回眸&啤酒鸭3 天前
【回眸】Minicart 电商购物车核心功能落地指南
人工智能
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
一隅论数智3 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
默_笙3 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
AI的探索之旅3 天前
97 个 OpenCV 实例(三十):双目立体,从标定到点云
人工智能·opencv·计算机视觉
AlbertZein3 天前
Step-5-Preview 上手实测:3D 游戏、金融分析、网页设计一次跑完
人工智能·aigc
LaughingZhu3 天前
Product Hunt 每日热榜 | 2026-09-19
人工智能·深度学习·神经网络·搜索引擎·百度
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)