IIRC gather collects coroutines in arbitrary order, maybe it's the source of misunderstanding?
On Mon, Jun 26, 2017 at 8:48 PM Yury Selivanov <yseliva...@gmail.com> wrote: > 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/ > -- Thanks, Andrew Svetlov
_______________________________________________ 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/