>我在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
任务排队,则可以看到异步行为。