我想返回async generator的第一个元素,并处理剩余的值,而不会像fire and forget那样返回。如何在python中尽早返回协同程序?
将迭代器传递给asyncio.create_task
后,它不会打印剩余的值
import asyncio
import time
async def async_iter(num):
for i in range(num):
await asyncio.sleep(0.5)
yield i
async def handle_remains(it):
async for i in it:
print(i)
async def run() -> None:
it = async_iter(10)
async for i in it:
print(i)
break
# await handle_remains(it)
# want to make this `fire and forget`(no await), expecting just printing the remainning values.
asyncio.create_task(handle_remains(it))
return i
if __name__ == '__main__':
asyncio.run(run())
time.sleep(10)
您对代码已经很熟悉了,但还不是很熟悉(请参见我上面的评论)。简而言之,创建Task是不够的:任务需要运行:
一个任务,连同协同程序和未来,是一个“Awaitable”。事实上:
注意“scheduled to run soon”,现在您必须确保通过调用await来实际运行任务,这是一个关键字,它
相关问题 更多 >
编程相关推荐