首页 > 解决方案 > 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我期望异步行为和值被打印为

start
finish
inside func1
5

但它同步打印为

start
5
inside func1
finish

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

标签: pythonasync-awaitcoroutinefastapi

解决方案


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

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


推荐阅读