代码之家  ›  专栏  ›  技术社区  ›  Jaanus Varus

过早关闭嵌套异步生成器

  •  1
  • Jaanus Varus  · 技术社区  · 6 年前

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

    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
    
    0 回复  |  直到 6 年前
        1
  •  0
  •   Jaanus Varus    6 年前

    在使用Python版本进行测试时,会出现原始问题 3.7.4 3.8.0b4 3.8.0rc1 :

    https://bugs.python.org/issue38013