![](https://secure.gravatar.com/avatar/fbeee3d76a35f9de8847f36ee51c28a2.jpg?s=120&d=mm&r=g)
You are not appending to the list that's being iterated ;) tasks is an async generator or possibly a custom object that overrides aiter, anext, etc. I'd say look at internals of aiostream's merge, it should not be too hard to extend perhaps On Wed, 18 Jul 2018 at 9:01 PM, James Stidard <jamesstidard@gmail.com> wrote:
Hi,
I was wondering if anyone has had experience implementing a similar pattern to this or has alternative suggestions of how to achieve it.
I have a bunch of async generators which I’d like to be able to merge into a single async generator I can iterate over. I found Vincent’s aiostream library which gives me this without too much effort:
from asyncio import sleep, run from aiostream.stream import merge
async def go(): yield 0 await sleep(1) yield 50 await sleep(1) yield 100
async def main(): tasks = merge(go(), go(), go())
async for v in tasks: print(v)
if __name__ == '__main__': run(main())
However, I also would like to be able to add additional tasks into the list once I’ve started iterating the list so something more akin to:
from asyncio import sleep, run from aiostream.stream import merge
async def go(): yield 0 await sleep(1) yield 50 await sleep(1) yield 100
async def main(): tasks = merge(go(), go(), go())
async for v in tasks: If v == 50: tasks.merge(go()) print(v)
if __name__ == '__main__': run(main())
Has anyone been able to achieve something like this?
p.s. I know appending to a list you’re iterating is bad practice, I assume the same would be true modifying this stream object, but think the example illustrates what I’m trying to achieve.
Thanks, James
_______________________________________________ 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/