首页 > 解决方案 > 过早关闭嵌套的异步生成器

问题描述

我正在寻找如何在不完全迭代的情况下关闭嵌套的异步生成器。例如:

import asyncio


async def gen1():
    yield 1
    yield 2


async def gen2():
    async for nr in gen1():
        yield nr


async def main():
    stream = gen2()
    print(await stream.__anext__())  # 1
    await stream.aclose()


asyncio.run(main())

但是,这会导致RuntimeError

unhandled exception during asyncio.run() shutdown
task: <Task finished name='Task-2' coro=<<async_generator_athrow without __name__>()> exception=RuntimeError("can't send non-None value to a just-started coroutine")>
RuntimeError: can't send non-None value to a just-started coroutine

标签: pythongeneratorpython-3.7python-asynciopython-3.8

解决方案


使用 Python 版本3.7.43.8.0b4. 它已被修复3.8.0rc1

https://bugs.python.org/issue38013


推荐阅读