Python 异步函数永远不会被等待



>我在python的异步框架FastAPI中实现了一个异步函数

该函数如下所示:

async def func2(num):
time.sleep(3)
return num
async def func1():
text = await func2(5)
print(text)
print('inside func1')
async def my_async_func():
print('start')
await func1()
print('finish')

在这里,当我执行my_async_func时,我希望 asyn 行为和值打印为

start
finish
inside func1
5

但它同步打印为

start
5
inside func1
finish

如何异步处理协程的并发操作和实现?

doasyncio.create_task,(注意:您无法确保按打印顺序inside func1后打印5

尝试以下代码:

import asyncio
import time

async def func2(num):
time.sleep(3)
return num

async def func1():
text = await func2(5)
print(text)
print('inside func1')

async def my_async_func():
print('start')
asyncio.create_task(func1())
print('finish')

asyncio.run(my_async_func())

结果:

start
finish
5
inside func1

另请注意,睡眠会使您的线程进入睡眠状态。

当几个独立的(ish)任务在事件循环中轮流执行时,就会出现异步行为,但在这里你只运行1个任务my_async_func。 然后my_async_func调用func1,然后调用func2;您的程序完全按照您编写的顺序执行。

这个函数调用链实际上不应该被称为同步,因为只有 1 个独立的任务。实际上,如果您将 2 个my_async_func任务排队,则可以看到异步行为。

最新更新