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

标签:Python,异步,推导式
0
投稿

猜你喜欢

  • OpenCV物体跟踪树莓派视觉小车实现过程学习

    2021-09-15 21:55:48
  • Dreamweaver使用技巧--让css使网页图片半透明

    2010-09-05 21:13:00
  • php从文件夹随机读取文件的方法

    2023-11-21 16:38:35
  • 详解利用Python scipy.signal.filtfilt() 实现信号滤波

    2022-09-23 21:23:03
  • Python参数类型以及常见的坑详解

    2023-04-16 13:52:33
  • Golang 的defer执行规则说明

    2023-07-14 08:31:10
  • python益智游戏计算汉诺塔问题示例

    2023-02-20 13:02:56
  • Python数据分析之使用scikit-learn构建模型

    2023-11-10 23:19:10
  • python实现简单银行管理系统

    2021-01-24 17:59:28
  • python time模块时间戳 与 结构化时间详解

    2021-04-09 11:06:42
  • GO语言原生实现文件上传功能

    2023-10-17 08:29:39
  • PHP页面静态化的优缺点与实现

    2023-05-27 09:14:40
  • Python基于回溯法子集树模板实现图的遍历功能示例

    2021-10-29 15:20:31
  • 友情连接地址代码-线线表格

    2010-07-01 16:26:00
  • 原创一个AJAX类

    2008-07-24 13:29:00
  • python使用opencv resize图像不进行插值的操作

    2023-09-12 15:04:25
  • asp 性能测试报告 学习asp朋友需要了解的东西

    2011-03-09 10:57:00
  • Python实现双人五子棋对局

    2022-12-26 04:41:39
  • 使用Python批量修改文件名的代码实例

    2022-03-21 04:02:53
  • 使用javascript修复浏览器中12个常见而又头痛的问题

    2008-10-28 19:38:00
  • asp之家 网络编程 m.aspxhome.com