ITPub博客

首页 > 应用开发 > Python > Python异步生成器的暂停

Python异步生成器的暂停

原创 Python 作者:raptors 时间:2025-11-12 16:16:54 0 删除 编辑

# Python异步生成器的暂停


异步生成器(async generator)是Python 3.6引入的特性,它结合了异步函数和生成器的功能。理解异步生成器的暂停机制对于编写高效的异步代码非常重要。


## 异步生成器暂停的基本原理


异步生成器在以下情况下会暂停:


1. **遇到`await`表达式**:当异步生成器执行到`await`语句时,它会暂停执行,直到等待的协程完成。


2. **遇到`yield`表达式**:当异步生成器执行到`yield`语句时,它会暂停并返回一个值给调用者。


## 示例代码


```python

import asyncio


async def async_generator():

    for i in range(5):

        # 暂停点1: 遇到await

        await asyncio.sleep(0.1)

        # 暂停点2: 遇到yield

        yield i


async def main():

    # 异步迭代异步生成器

    async for item in async_generator():

        print(item)


asyncio.run(main())

```


## 暂停的详细过程


1. **调用异步生成器函数**:调用异步生成器函数不会立即执行代码,而是返回一个异步生成器对象。


2. **迭代开始**:当使用`async for`开始迭代时,会调用异步生成器的`__anext__()`方法。


3. **执行到第一个暂停点**:

   - 遇到`await`时,生成器暂停,控制权返回给事件循环

   - 当`await`的协程完成后,生成器恢复执行


4. **执行到`yield`**:

   - 生成器暂停并返回一个值

   - 下一次调用`__anext__()`时,生成器从`yield`之后恢复执行


## 注意事项


- 异步生成器不能使用普通的`for`循环迭代,必须使用`async for`

- 异步生成器不支持`send()`、`throw()`和`close()`方法(与普通生成器不同)

- 异步生成器通常用于I/O密集型操作,如从网络或数据库流式读取数据


## 资源清理


异步生成器可以使用`async with`和异步上下文管理器来确保资源被正确清理:


```python

async def async_gen_with_resource():

https://zq.zhaopin.com/moment/71119253

https://zq.zhaopin.com/moment/71119190

https://zq.zhaopin.com/moment/71118829

https://zq.zhaopin.com/moment/71118765

https://zq.zhaopin.com/moment/71117315

https://zq.zhaopin.com/moment/71117313

https://zq.zhaopin.com/moment/71117300

https://zq.zhaopin.com/moment/71117299

https://zq.zhaopin.com/moment/71117298

https://zq.zhaopin.com/moment/71117296

https://zq.zhaopin.com/moment/71117254

https://zq.zhaopin.com/moment/71117251

https://zq.zhaopin.com/moment/71117248

https://zq.zhaopin.com/moment/71117244

https://zq.zhaopin.com/moment/71117241

https://zq.zhaopin.com/moment/71117237



    async with some_async_context() as resource:

        for i in range(5):

            await asyncio.sleep(0.1)

            yield await resource.get_data(i)

```


理解异步生成器的暂停机制有助于编写更高效、更清晰的异步Python代码。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/34366/viewspace-3101096/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2019-09-29

  • 博文量
    20
  • 访问量
    20448