Python 从不等待异步函数

Python async function is never awaited

我在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

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

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

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

asyncio.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

另请注意,睡眠会使您的线程睡眠。