
Hi group, I'm trying to cross-use an sync generator across several async functions. Is it allowed or a completely bad idea? (if so, why?) Here's MRE: import asyncio async def generator(): while True: x = yield print("received", x) await asyncio.sleep(0.1) async def user(name, g): print("sending", name) await g.asend(name) async def helper(): g = generator() await g.asend(None) await asyncio.gather(*[user(f"user-{x}", g) for x in range(3)]) if __name__ == "__main__": asyncio.get_event_loop().run_until_complete(helper()) And the output it produces when ran (py3.6.1): sending user-1 received user-1 sending user-2 sending user-0 received None received None Where are those None's coming from in the end? Where did "user-0" and "user-1" data go? Is this a bug, or am I hopelessly confused? Thanks!