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_func
。 my_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
另请注意,睡眠会使您的线程睡眠。
我在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_func
。 my_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
另请注意,睡眠会使您的线程睡眠。