1

我有一个异步生成器,我试图将它传递给 keras 模型 fit_generator,但异步生成器返回一个对象,而不是生成器。

我试过谷歌搜索,但我还没有找到解决方案。这似乎是一个非常具体的问题。

4

1 回答 1

1

目的是asyncio将异步生成器与常规生成器分开,请在此处阅读答案。

但是,如果您决定不在其他地方同时运行异步生成器并且您唯一的目的是避免 RAM 溢出,您可以将异步生成器转换为常规手动迭代异步生成器并等待每个新项目:

import asyncio


async def my_gen():
    for i in range(10):
        yield i
        await asyncio.sleep(0.5)


def to_sync_generator(ait):
    loop = asyncio.get_event_loop()
    try:
        while True:
            try:
                coro = ait.__anext__()
                res = loop.run_until_complete(coro)
            except StopAsyncIteration:
                return
            else:
                yield res
    finally:
        coro = loop.shutdown_asyncgens()
        loop.run_until_complete(coro)


# Check:

if __name__ == '__main__':
    for i in to_sync_generator(my_gen()):
        print(i)

PS没有太多测试代码。

于 2019-09-08T19:54:35.910 回答