Python 异步之推导式示例详解
作者:冷冻工厂 发布时间:2021-05-16 17:31:08
引言
当我们想到“pythonic”时,理解,如列表和字典理解是 Python 的一个特性。
这是我们执行循环的一种方式,与许多其他语言不同。
Asyncio 允许我们使用异步推导式。
我们可以通过“async for”表达式使用异步推导式来遍历异步生成器和异步迭代器。
1. 什么是异步推导式
异步推导式是经典推导式的异步版本。Asyncio 支持两种类型的异步推导式,它们是“async for”推导式和“await”推导式。
在我们看每之前,让我们首先回顾一下经典的推导式。
2. 推导式
推导式允许以简洁的方式创建列表、字典和集合等数据集合。列表推导式允许从新列表表达式中的 for 表达式创建列表。
...
# create a list using a list comprehension
result = [a*2 for a in range(100)]
还支持推导式来创建字典和集合。
...
# create a dict using a comprehension
result = {a:i for a,i in zip(['a','b','c'],range(3))}
# create a set using a comprehension
result = {a for a in [1, 2, 3, 2, 3, 1, 5, 4]}
3. 异步推导式
异步推导式允许使用带有异步可迭代对象的“async for”表达式来创建列表、集合或字典。
...
# async list comprehension with an async iterator
result = [a async for a in aiterable]
这将根据需要创建和安排协程或任务,并将其结果放入列表中。
回想一下,“async for”表达式只能在协程和任务中使用。
另外,回想一下异步迭代器是一个产生可等待对象的迭代器。
“async for”表达式允许调用者遍历等待对象的异步迭代器并从每个对象中检索结果。
在内部,async for 循环将根据需要自动解析或等待每个可等待的调度协程。
异步生成器自动实现异步迭代器的方法,也可用于异步推导式。
...
# async list comprehension with an async generator
result = [a async for a in agenerator]
4. Await 推导式
“等待”表达式也可以在列表、集合或字典理解中使用,称为等待推导式。
与异步推导式一样,它只能在异步协程或任务中使用。
这允许通过挂起和等待一系列可等待对象来创建数据结构,如列表。
...
# await list compression with a collection of awaitables
results = [await a for a in awaitables]
这将通过依次等待每个可等待对象来创建结果列表。
当前协程将被挂起以顺序执行可等待对象,这与使用 asyncio.gather() 并发执行它们不同,而且可能更慢。
来源:https://juejin.cn/post/7210744398649655333


猜你喜欢
- ?图解redis通信协议请求协议:请求协议一般格式:*<参数数量> CR LF$<参数 1 的字节数量> CR LF
- 本文实例讲述了python解析xml文件的方法。分享给大家供大家参考。具体如下:python解析xml非常方便。在dive into pyt
- 前言:图像滤波是图像处理和计算机视觉中最常用、最基本的操作。主要是去除图像中的噪声,因为图像平滑处理过程中往往会使得图像变的模糊,因此又叫模
- python安装教程和Pycharm安装详细教程,分享给大家。首先我们来安装python1、首先进入网站下载:点击打开链接(或自己输入网址h
- golang 原生 http 库已经可以很方便地实现一个 http server 了,但对于复杂的 web 服务来说,路由解析,请求参数解析
- 本文实例讲述了PHP引用的调用方法。分享给大家供大家参考,具体如下:示例1:function test($arr){} echo test(
- python 中的视频处理模块,有一个叫做 moviepy,今天我们就来唠唠它。模块安装使用如下命令即可pip install moviep
- 对象存储(Cloud Object Storage,COS)是一种存储海量文件的分布式存储服务,具有高扩展性、低成本、可靠安全等优点。对象存
- 工作中遇到大概20万的数据插入操作,程序编完后发现运行超时,修改PHP最大执行时间到600,还是超时,检查超时前插入的数据条数推算一下,大概
- 本文实例主要实现的是使用urllib和BeautifulSoup爬取 * 的词条,具体如下。简洁代码:#引入开发包from urllib.
- python爬取淘宝商品销量的程序,运行程序,输入想要爬取的商品关键词,在代码中的‘###'可以进一步约束商品的属性,比如某某作者的
- 使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载刷新整个页面,这使得程序能够更快地回应用户的操作,如下笔记将简单介
- 本文实例讲述了Python多线程编程之多线程加锁操作。分享给大家供大家参考,具体如下:Python语言本身是支持多线程的,不像PHP语言。下
- 本文实例为大家分享了JS实现九宫格抽奖的具体代码,供大家参考,具体内容如下上代码:<div class="wrapper&q
- 开发环境集成开发工具:jupyter notebook 6.5.2集成开发环境:Python 3.10.6第三方库:to
- 当我们在使用Pycharm时,总是会建立多个项目文件,但是分别打开每个项目文件会很麻烦,接下来看在Project Files下如何创建多个项
- 目录引言 操作多线程/多进程1、创建线程池2、submit3、map4
- var header1 = document.getElementById("header"); var p = doc
- 按行读取TXT文件 fname = './新建文件夹/yob2010.txt' //文件夹路径with open
- 本文实例讲述了Python wxpython模块响应鼠标拖动事件操作。分享给大家供大家参考,具体如下:wxpython鼠标拖动事件小案例:#