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

相关推荐
Juicedata42 分钟前
JuiceFS v1.3-Beta2:集成 Apache Ranger,实现更精细化的权限控制
运维·人工智能·ai
Work(沉淀版)3 小时前
DAY 40
人工智能·深度学习·机器学习
蓦然回首却已人去楼空4 小时前
Build a Large Language Model (From Scratch) 序章
人工智能·语言模型·自然语言处理
CM莫问4 小时前
<论文>(微软)WINA:用于加速大语言模型推理的权重感知神经元激活
人工智能·算法·语言模型·自然语言处理·大模型·推理加速
拾忆-eleven4 小时前
NLP学习路线图(二十六):自注意力机制
人工智能·深度学习
MYH5165 小时前
在NLP文本处理中,将字符映射到阿拉伯数字(构建词汇表vocab)的核心目的和意义
人工智能·深度学习·自然语言处理
程序员的世界你不懂5 小时前
Appium+python自动化(八)- 认识Appium- 下章
python·appium·自动化
要努力啊啊啊5 小时前
KV Cache:大语言模型推理加速的核心机制详解
人工智能·语言模型·自然语言处理
恸流失5 小时前
DJango项目
后端·python·django
Julyyyyyyyyyyy6 小时前
【软件测试】web自动化:Pycharm+Selenium+Firefox(一)
python·selenium·pycharm·自动化