简单聊一下 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模块提供了对协程的支持,并提供了一个统一的异步编程框架。协程在现代异步编程中具有重要的作用。

相关推荐
高频因子挖掘机6 分钟前
实时行情为什么不应该逐只股票请求?批量查询与标的池管理实践
后端·github·api
MobotStone2 小时前
AI 玩不好?别怪工具,是你给它定的规矩有问题!
人工智能
程序猿DD5 小时前
OctaFuse Gateway 2.15.0:MCP 聚合、向量 Embeddings 与官方目录同步
后端·agent
AI日报派送佬6 小时前
2026年10月14日AI行业日报|Gemini 4 Argon正式发布;小模型跨设备传播风险引发安全热议
网络·人工智能·openai·谷歌·deepseek·anthropic·ai日报
VidDown7 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
镜象科技7 小时前
职业院校AI心理健康解决方案怎么选?三个特殊场景与三类路线
人工智能
Leo.yuan8 小时前
企业Data Agent架构选型:帆软Dora基于NL2BI的现有BI体系复用方案
大数据·人工智能
余槐i8 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
朱涛的自习室8 小时前
70 美金的 Beyond Compare,我让 Gemini 4 和 DeepSeek 造个开源免费版(Day 2)
android·前端·人工智能
米小虾8 小时前
上下文:Agent 的眼睛里到底装着什么
人工智能·agent