Hi Dima, > On Jun 26, 2017, at 12:25 PM, Dima Tisnek <dim...@gmail.com> wrote: > > 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?)
It is allowed, but leads to complex code. > > 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? Interesting. If I replace "gather" with three consecutive awaits of "asend", everything works as expected. So there's some weird interaction of asend/gather, or maybe you did find a bug. Need more time to investigate. Would you mind to open an issue on bugs.python? Thanks, Yury _______________________________________________ Async-sig mailing list Async-sig@python.org https://mail.python.org/mailman/listinfo/async-sig Code of Conduct: https://www.python.org/psf/codeofconduct/