Python 中的异步生成器函数

Asynchronous generator functions in Python

参考 Python 文档中的 this example

def gen(): # defines a generator function
  yield 123


async def agen(): # defines an asynchronous generator function
  yield 123

我知道这个例子很简单,但是我可以gen做什么,不能agen,反之亦然?我会通过什么方式注意到它们的不同?

相关:

我认为这个问题会有所帮助,但我还是不明白:

一个适合 async/await 框架,另一个不适合。

首先,常规生成器函数。这里没有协作式多任务处理:

def f():
    return 4


def g():
    return 5


def gen():
    """cannot call async functions here"""
    yield f()
    yield g()


def run():
    for v in gen():
        print(v)

与以下相比, 协作式多任务处理。允许其他任务 运行 在 await 之后/async for

期间
async def f():
    return 4


async def g():
    return 5


async def gen():
    """can await async functions here"""
    yield await f()
    yield await g()


async def run():
    async for v in gen():
        print(v)


asyncio.run(run())