我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python异步之生成器怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python异步之生成器怎么使用

这篇文章主要介绍“Python异步之生成器怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python异步之生成器怎么使用”文章能帮助大家解决问题。

正文

生成器是 Python 的基本组成部分。生成器是一个至少有一个“yield”表达式的函数。它们是可以暂停和恢复的函数,就像协程一样。

实际上,Python 协程是 Python 生成器的扩展。Asyncio 允许我们开发异步生成器。我们可以通过定义一个使用“yield”表达式的协程来创建一个异步生成器。

1. 什么是异步生成器

异步生成器是使用 yield 表达式的协程。在我们深入了解异步生成器的细节之前,让我们先回顾一下经典的 Python 生成器。

1.1. Generators

生成器是一个 Python 函数,它通过 yield 表达式返回一个值。

# define a generatordef generator():for i in range(10):yield i

生成器执行到 yield 表达式,之后返回一个值。这会在该点暂停生成器。下一次执行生成器时,它将从恢复点恢复并运行直到下一个 yield 表达式。

从技术上讲,生成器函数创建并返回一个生成器迭代器。生成器迭代器执行生成器函数的内容,根据需要产生和恢复。

可以使用内置函数 next() 分步执行生成器。

...# create the generatorgen = generator()# step the generatorresult = next(gen)

虽然,更常见的是迭代生成器直到完成,例如使用 for 循环或列表理解。

...# traverse the generator and collect resultsresults = [item for item in generator()]

接下来,让我们仔细看看异步生成器。

1.2. Asynchronous Generators

异步生成器是使用 yield 表达式的协程。与函数生成器不同,协程可以调度和等待其他协程和任务。

与经典生成器一样,异步生成器函数可用于创建可使用内置的 anext() 函数而不是 next() 函数遍历的异步生成器迭代器。

这意味着异步生成器迭代器实现了 anext() 方法并且可以与 async for 表达式一起使用。

这意味着生成器的每次迭代都被安排并执行为可等待的。 “async for”表达式将调度并执行生成器的每次迭代,暂停调用协程并等待结果。

2. 如何使用异步生成器

在本节中,我们将仔细研究如何在 asyncio 程序中定义、创建、步进和遍历异步生成器。

让我们从如何定义异步生成器开始。

2.1. 定义

我们可以通过定义一个至少有一个 yield 表达式的协程来定义一个异步生成器。

这意味着该函数是使用“async def”表达式定义的。

# define an asynchronous generatorasync def async_generator():for i in range(10)yield i

因为异步生成器是一个协程,并且每个迭代器返回一个在 asyncio 事件循环中调度和执行的等待对象,所以我们可以在生成器主体内执行和等待等待对象。

# define an asynchronous generator that awaitsasync def async_generator():for i in range(10)# suspend and sleep a momentawait asyncio.sleep(1)# yield a value to the calleryield i

接下来,让我们看看如何使用异步生成器。

2.2. 创建

要使用异步生成器,我们必须创建生成器。这看起来像是调用它,而是创建并返回一个迭代器对象。

...# create the iteratorit = async_generator()

这将返回一种称为异步生成器迭代器的异步迭代器。

2.3. 一步

可以使用 anext() 内置函数遍历生成器的一个步骤,就像使用 next() 函数的经典生成器一样。

结果是等待的可等待对象。

...# get an awaitable for one step of the generatorawaitable = anext(gen)# execute the one step of the generator and get the resultresult = await awaitable

这可以一步实现。

...# step the async generatorresult = await anext(gen)

2.4. 遍历

还可以使用“async for”表达式在循环中遍历异步生成器,该表达式将自动等待循环的每次迭代。

...# traverse an asynchronous generatorasync for result in async_generator():print(result)

我们还可以使用带有“async for”表达式的异步列表理解来收集生成器的结果。

...# async list comprehension with async generatorresults = [item async for item in async_generator()]

3. 异步生成器示例

我们可以探索如何使用“async for”表达式遍历异步生成器。

在此示例中,我们将更新之前的示例以使用“async for”循环遍历生成器直至完成。

此循环将自动等待从生成器返回的每个可等待对象,检索产生的值,并使其在循环体内可用,以便在这种情况下可以报告它。

这可能是异步生成器最常见的使用模式。

# SuperFastPython.com# example of asynchronous generator with async for loopimport asyncio# define an asynchronous generatorasync def async_generator():    # normal loop    for i in range(10):        # block to simulate doing work        await asyncio.sleep(1)        # yield the result        yield i# main coroutineasync def main():    # loop over async generator with async for loop    async for item in async_generator():        print(item)# execute the asyncio programasyncio.run(main())

运行示例首先创建 main() 协程并将其用作 asyncio 程序的入口点。main() 协程运行并启动 for 循环。

异步生成器的一个实例被创建,循环使用 anext() 函数自动单步执行它以返回一个可等待对象。然后循环等待可等待对象并检索一个值,该值可用于报告它的循环体。

然后重复此过程,挂起 main() 协程,执行生成器的迭代,然后挂起和恢复 main() 协程,直到生成器耗尽。

这突出显示了如何使用 async for 表达式遍历异步生成器。

0
1
2
3
4
5
6
7
8
9

关于“Python异步之生成器怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python异步之生成器怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python异步之生成器怎么使用

这篇文章主要介绍“Python异步之生成器怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python异步之生成器怎么使用”文章能帮助大家解决问题。正文生成器是 Python 的基本组成部分。
2023-07-05

Python异步之生成器示例详解

这篇文章主要为大家介绍了Python异步之生成器示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-22

Python异步之迭代器怎么使用

这篇文章主要介绍“Python异步之迭代器怎么使用”,在日常操作中,相信很多人在Python异步之迭代器怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python异步之迭代器怎么使用”的疑惑有所帮助!
2023-07-05

Python生成器怎么使用

本篇内容介绍了“Python生成器怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!生成器仅仅拥有生成某种东西的能力,如果不用__nex
2023-06-17

Python异步之上下文管理器怎么使用

本篇内容主要讲解“Python异步之上下文管理器怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python异步之上下文管理器怎么使用”吧!正文上下文管理器是一种 Python 构造,它提
2023-07-05

Python生成器yield怎么使用

这篇“Python生成器yield怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python生成器yield怎么使用
2023-07-02

python列表生成器怎么使用

本篇内容介绍了“python列表生成器怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!列表生成式基础语法[exp for iter_v
2023-07-02

Python学习之使用Python生成P

在有些时候运维同事需要对一些数据收集后形成PDF报告的形式发送出去。利用python的reportlab库可以帮我们很快的实现自定义生成PDF报告。在CentOS 下通过sudo yum install python-reportlab -
2023-01-31

python生成器怎么定义和使用

本文小编为大家详细介绍“python生成器怎么定义和使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“python生成器怎么定义和使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 生成器概念生成器(英文:
2023-07-02

python怎么使用send启动生成器

小编给大家分享一下python怎么使用send启动生成器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、说明send方法启动生成器的时候可以传参数。如果第一次启
2023-06-15

Python异步之迭代器如何使用详解

这篇文章主要为大家介绍了Python异步之迭代器如何使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-22

MyBatisPlus之id生成策略怎么使用

这篇文章主要介绍“MyBatisPlus之id生成策略怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MyBatisPlus之id生成策略怎么使用”文章能帮助大家解决问题。一、为什么需要选择不
2023-07-05

如何使用Python异步之上下文管理器

这篇文章主要为大家介绍了如何使用Python异步之上下文管理器详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-22

C#异步编程之async/await怎么使用

今天小编给大家分享一下C#异步编程之async/await怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。概述异步这个
2023-07-05

python怎么使用openai生成图像

这篇文章主要介绍“python怎么使用openai生成图像”,在日常操作中,相信很多人在python怎么使用openai生成图像问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python怎么使用openai生
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录