关于异步并发控制的问题
大家好,我再学习python异步编程中,遇到一个无法理解的情况,代码如下:```
import asyncio
import time
async def do():
for i in range(0,10):
asyncio.create_task(say_after(1,i))
async def say_after(delay, what):
print(f'say_after_delay:{delay}')
await asyncio.sleep(delay)
print(f'say_after:{what}')
return f'返回值:{what}'
async def main():
print(f"started at {time.strftime('%X')}")
await do()
flag = True
while flag:
for i in asyncio.all_tasks():
print(i.get_name())
# await asyncio.sleep(1)
time.sleep(1)
print(f"finished at {time.strftime('%X')}")
asyncio.run(main())
```
当使用time.sleep(1)的时候,控制台不会打印say_after的执行内容。知道time.sleep会阻塞线程,但是问题是无线循环时为什么控制流为什么一直不会执行到异步任务了?
await sleep是当前线程sleep 你的flag一直是true,都出不去吧 whh19921024 发表于 2024-3-15 12:09
你的flag一直是true,都出不去吧
是的,因为没有直接对task进行await,没有无限循环运行就直接运行了。
页:
[1]