将异步可迭代转换为同步可迭代列表的内置方法

Gar*_*rwe 10 python python-3.x python-asyncio

Python3.6 现在异步可迭代。是否有内置方法可以将异步可迭代转换为同步可迭代。

我目前有这个辅助函数,但感觉非常不Pythonic。有一个更好的方法吗?

async def aiter_to_list(aiter):
    l = []
    async for i in aiter:
        l.append(i)
    return l
Run Code Online (Sandbox Code Playgroud)

sup*_*odo 18

Python 3.6开始,您可以使用异步推导式

async def async_iter():
    for i in range(0,5):
        yield i

# async comprehension
sync_list = [gen async for gen in async_iter()]

print(sync_list) # [0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)


Vin*_*ent 6

您可以使用aiostream.stream.list

from aiostream import stream

async def agen():
    yield 1
    yield 2
    yield 3

async def main():
    lst = await stream.list(agen())
    print(lst)  # prints [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

文档中有更多运算符和示例。