New submission from Sam Frances <s...@samfrances.uk>:
The documentation for `asyncio.run()` states: "This function runs the passed coroutine, taking care of managing the asyncio event loop and finalizing asynchronous generators." However, the following example seems to indicate that async generators are not being cleared up correctly. ``` import asyncio async def count(): try: i = 0 while True: yield i i += 1 finally: print("count() cleanup") async def double(source): try: async for n in source: yield n * 2 finally: print("double() cleanup") async def anext(aiter): return await aiter.__anext__() async def main(): async for i in double(count()): if i > 10: return print(i) asyncio.run(main()) ``` The result is: ``` $ python example.py 0 2 4 6 8 10 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 count() cleanup ``` The above error is from Python 3.8.0b1+, but the exact same error occurs in Python 3.7. I'm not sure if this is a bug or if I am misunderstanding the intended behaviour of `asyncio.run()`, but the behaviour was certainly surprising to me. ---------- components: asyncio messages: 346943 nosy: asvetlov, samfrances, yselivanov priority: normal severity: normal status: open title: asyncio.run() error related to finalizing async generators type: behavior versions: Python 3.7, Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue37455> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com