前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python异步: 什么是异步? (2)

Python异步: 什么是异步? (2)

原创
作者头像
数据科学工厂
发布于 2023-01-28 10:35:28
发布于 2023-01-28 10:35:28
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

广义上,asyncio 是指使用协程在 Python 中实现异步编程的能力。

具体来说,它指的是两个要素:

  1. 在 Python 3.4 中将“asyncio”模块添加到 Python 标准库中。
  2. 在 Python 3.5 中向 Python 语言添加了 async/await 表达式。

模块和语言的变化共同促进了支持基于协程的并发、非阻塞 I/O 和异步编程的 Python 程序的开发。

让我们仔细看看 asyncio 的这两个方面,从语言的变化开始。

1. 异步支持

Python 语言已更改为通过添加表达式和类型来适应 asyncio。更具体地说,它被更改为支持协程作为一流的概念。反过来,协程是 asyncio 程序中使用的并发单元。协程是一个可以挂起和恢复的函数。

协程可以通过“async def”表达式定义。它可以接受参数并返回一个值,就像函数一样。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# define a coroutine
async def custom_coro():
	# ...

调用协程函数会创建一个协程对象,这是一个新的类。它不执行协程函数。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
...
# create a coroutine object
coro = custom_coro()

协程可以通过 await 表达式执行另一个协程。这会暂停调用者并安排目标执行。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
...
# suspend and schedule the target
await custom_coro()

异步迭代器是产生可等待对象的迭代器。可以使用“async for”表达式遍历异步迭代器。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
...
# traverse an asynchronous iterator
async for item in async_iterator:
	print(item)

这不会并行执行 for 循环。相反,执行 for 循环的调用协程将挂起并在内部等待迭代器产生的每个可等待对象。

异步上下文管理器是可以等待进入和退出方法的上下文管理器。“async with”表达式用于创建和使用异步上下文管理器。调用协程将在进入上下文管理器块之前挂起并等待上下文管理器,在离开上下文管理器块时也是如此。

这些是为支持协程而对 Python 语言进行的主要更改的总结。

2. 异步模块

“asyncio”模块提供函数和对象,用于使用异步编程范例开发基于协程的程序。具体来说,它支持带有子进程(用于执行命令)和流(用于 TCP 套接字编程)的非阻塞 I/O。

asyncio 模块的核心是事件循环。这是运行基于协程的程序并实现协程之间协作多任务处理的机制。该模块同时提供高级和低级 API。高级 API 是为我们 Python 应用程序开发人员准备的。在大多数情况下,低级 API 适用于框架开发人员,而不是我们。大多数用例都可以使用高级 API 来满足,这些 API 提供实用程序来处理协程、流、同步原语、子进程和队列,以便在协程之间共享数据。较低级别的 API 为高级 API 提供了基础,包括事件循环的内部结构、传输协议、策略等。

现在我们大致了解了 asyncio 是什么,它用于异步编程。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PEP 492 -- Coroutines with async and await syntax 翻译
原文中把词汇表放到最后,但是我个人觉得放在最开始比较好,这样可以增加当你看原文时的理解程度
coders
2018/12/24
1.1K0
WeeklyPEP-8-PEP 492-使用 async 和 await 语法的协程-overview
本文的主体内容大部分来自对 PEP 492 原文的翻译,剩余部分是本人对原文的理解,在整理过程中我没有刻意地区分二者,这两部分被糅杂在一起形成了本文。因此请不要带着「本文的内容是百分百正确」的想法阅读。如果文中的某些内容让你产生疑惑,你可以给我留言与我讨论或者对比 PEP 492 的原文加以确认。
Ryoma
2024/03/06
1950
流畅的 Python 第二版(GPT 重译)(十一)
本章重点介绍了封装“生成一堆独立线程并将结果收集到队列中”模式的concurrent.futures.Executor类,这是米歇尔·西莫纳托描述的。并发执行器使得这种模式几乎可以轻松使用,不仅适用于线程,还适用于进程——对于计算密集型任务非常有用。
ApacheCN_飞龙
2024/03/21
3190
流畅的 Python 第二版(GPT 重译)(十一)
Python 异步: 协程(4)
Python 提供一流的协程,具有“coroutine”类型和新的表达式,如“async def”和“await”。它提供了用于运行协程和开发异步程序的“asyncio”模块。
数据科学工厂
2023/01/28
8810
Python 异步: 创建和运行异步任务(7)
您可以从 asyncio 程序中的协程创建任务对象。任务提供独立调度和运行的协程的句柄,并允许查询、取消任务,以及稍后检索结果和异常。异步事件循环管理任务。因此,所有协程都成为事件循环中的任务并作为任务进行管理。
数据科学工厂
2023/02/27
8430
Python 异步: 创建和运行异步任务(7)
python并发2:使用asyncio处理并发
asyncio 是Python3.4 之后引入的标准库的,这个包使用事件循环驱动的协程实现并发。asyncio 包在引入标准库之前代号 “Tulip”(郁金香),所以在网上搜索资料时,会经常看到这种花的名字。
goodspeed
2020/12/25
2.5K0
python进阶(17)协程「建议收藏」
协程(Coroutine),又称微线程,纤程。(协程是一种用户态的轻量级线程) 作用:在执行 A 函数的时候,可以随时中断,去执行 B 函数,然后中断B函数,继续执行 A 函数 (可以自动切换),但这一过程并不是函数调用(没有调用语句),过程很像多线程,然而协程只有一个线程在执行 通俗的理解:在一个线程中的某个函数,可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的,并且切换的次数以及什么时候再切换到原来的函数都由开发者自己确定
全栈程序员站长
2022/09/19
1.1K0
【测试开发】python系列教程:asyncio模块
Python的asyncio模块是一个用于编写单线程并发代码的库,使用协程,多路复用IO以及其他技术。asyncio即Asynchronous I/O是python一个用来处理并发(concurrent)事件的包,是很多python异步架构的基础,多用于处理高并发网络请求方面的问题。
雷子
2023/09/12
3710
【测试开发】python系列教程:asyncio模块
Python 异步: 创建和运行异步任务(7)
您可以从 asyncio 程序中的协程创建任务对象。任务提供独立调度和运行的协程的句柄,并允许查询、取消任务,以及稍后检索结果和异常。异步事件循环管理任务。因此,所有协程都成为事件循环中的任务并作为任务进行管理。
数据科学工厂
2023/02/06
1.9K0
Python黑科技之异步编程:玩转事件循环
Python的异步编程是一项极为强大的技术,通过事件循环和协程,你可以实现高效的非阻塞并发操作。在这篇文章中,我们将揭示Python异步编程的黑科技,深入了解事件循环的奥秘,助你在编写异步代码时游刃有余。
dbdocker
2024/02/04
5400
深入Python异步编程:概念、应用场景与实践
在编程世界中,异步编程已经成为处理高并发和IO密集型任务的主流方式之一。Python作为一种流行的编程语言,也提供了强大的异步编程支持。本文将介绍Python中的异步编程概念,以及它的应用场景和实际代码示例。
一键难忘
2024/08/08
3080
深入理解Python异步编程(上)
彻底理解异步编程是什么、为什么、怎么样。深入学习asyncio的基本原理和原型,了解生成器、协程在Python异步编程中是如何发展的。
SeanCheney
2018/08/16
7.2K0
深入理解Python异步编程(上)
流畅的 Python 第二版(GPT 重译)(十)
本章讨论的是在其他语言中不太常见的控制流特性,因此往往在 Python 中被忽视或未充分利用。它们包括:
ApacheCN_飞龙
2024/03/21
3510
流畅的 Python 第二版(GPT 重译)(十)
Python异步: 定义、创建和运行协程(5)
我们可以在我们的 Python 程序中定义协程,就像定义新的子例程(函数)一样。一旦定义,协程函数可用于创建协程对象。“asyncio”模块提供了在事件循环中运行协程对象的工具,事件循环是协程的运行时。
数据科学工厂
2023/01/31
5930
python基础教程:异步IO 之 API
Python的asyncio是使用 async/await 语法编写并发代码的标准库。通过上一节的讲解,我们了解了它不断变化的发展历史。到了Python最新稳定版 3.7 这个版本,asyncio又做了比较大的调整,把这个库的API分为了 高层级API和低层级API,并引入asyncio.run()这样的高级方法,让编写异步程序更加简洁。
一墨编程学习
2019/05/15
8930
Python 异步爬虫原理解析及爬取实战
爬虫是 IO 密集型任务,比如我们使用 requests 库来爬取某个站点的话,发出一个请求之后,程序必须要等待网站返回响应之后才能接着运行,而在等待响应的过程中,整个爬虫程序是一直在等待的,实际上没有做任何的事情。
叶庭云
2022/05/08
8330
Python  异步爬虫原理解析及爬取实战
Python异步IO操作,看这个就够了
异步 IO 是一种并发编程设计,Python3.4 开始,已经有专门的标准库 asyncio 来支持异步 IO 操作。你可能会说,我知道并发用多线程,并行用多进程,这里面的知识已经够我掌握的了,异步 IO 又是个什么鬼?本文将会回答该问题,从而使你更加牢固地掌握 Python 的异步 IO 操作方法。
somenzz
2020/11/25
2.9K0
Python异步IO操作,看这个就够了
Python异步: 什么时候使用异步?(3)
从广义上讲,Asyncio 是新的、流行的、讨论广泛的和令人兴奋的。然而,对于何时应该在项目中采用它存在很多困惑。
数据科学工厂
2023/01/28
1.2K0
深入理解Python异步编程
对于其他的并发模型大多数采取的都是线性的方式编写。并且依赖于语言运行时系统或操作系统的底层线程或进程来适当地改变上下文,而基于asyncio的应用要求应用代码显示的处理上下文切换。 asyncio提供的框架以事件循环(event loop)为中心,程序开启一个无限的循环,程序会把一些函数注册到事件循环上。当满足事件发生的时候,调用相应的协程函数。
sergiojune
2019/05/07
2.4K0
Python协程、异步IO与asyncio
协程是一种轻量级的线程,它允许函数在执行过程中暂停并恢复。与常规函数不同,协程具有多个入口点,可以在函数内部的任何位置暂停和继续执行。Python的协程通过async和await关键字来定义和管理。
五分钟学SRE
2023/11/17
9030
Python协程、异步IO与asyncio
相关推荐
PEP 492 -- Coroutines with async and await syntax 翻译
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验