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/

Reply via email to