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())
参考 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())