如何将AsyncIterable转换为asyncio Task并实现并行运行?
解决方案
首先定义一个辅助协程,用来收集异步迭代器的所有结果,将其转换为可被asyncio.gather处理的协程:
async def collect_async_iter(aiter: AsyncIterable): return [item async for item in aiter]
接着直接用asyncio.gather并行运行多个包装后的任务,结果会严格按传入顺序与源迭代器一一对应:
results_1, results_2, results_3 = await asyncio.gather(collect_async_iter(iterable()), collect_async_iter(iterable()), collect_async_iter(iterable()))
关键说明
[item async for item in aiter]是Python 3.10+支持的异步列表推导,会遍历异步迭代器至结束并收集所有元素- 若需要显式创建
asyncio.Task而非让gather自动封装,可传入asyncio.create_task(collect_async_iter(iterable()))
内容的提问来源于stack exchange,提问作者Intrastellar Explorer
相关产品推荐
相关产品推荐

