,python,python-asyncio"/>

首页 > 解决方案 > 解决

问题描述

我有一个产生的功能:

<async_generator object functionOne at 0x000001CC289F8D30>

是否可以解析 async_generator 对象,使其包含的数组可访问?

标签: pythonpython-asyncio

解决方案


它后面没有任何数组(它是一个生成器,设计为惰性),您应该使用async foror 手动迭代这个对象,使用__aiter__()and __anext__()。这可能对你有用:

async_generator_iterator = <your_async_generator_function>()
res = [i async for i in async_generator_iterator]

如果你想在异步上下文之外评估它,只需用异步函数包装它并在事件循环中运行:

async def get_result_async(asyncgen):
    return [i async for i in asyncgen]

def get_result_sync(asyncgen):
    loop = asyncio.get_event_loop()
    coro = get_result_async(asyncgen)
    res = loop.run_until_complete(coro)
    return res
    
async def functionOne():
    yield 1
    yield 2
    yield 3

asyncgen = functionOne()
get_result_sync(asyncgen)

# => [1, 2, 3]

推荐阅读