sweetarea 发表于 2024-3-15 11:33

关于异步并发控制的问题

大家好,我再学习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会阻塞线程,但是问题是无线循环时为什么控制流为什么一直不会执行到异步任务了?


bushixian 发表于 2024-3-15 11:50

await sleep是当前线程sleep

whh19921024 发表于 2024-3-15 12:09

你的flag一直是true,都出不去吧

sweetarea 发表于 2024-3-15 12:19

whh19921024 发表于 2024-3-15 12:09
你的flag一直是true,都出不去吧

是的,因为没有直接对task进行await,没有无限循环运行就直接运行了。
页: [1]
查看完整版本: 关于异步并发控制的问题