理解Python异步编程

问题描述 投票:0回答:1

这是一段Python异步编程代码。


async def my_task(task_id):
    print(f"Task {task_id} started, waiting for 2 seconds...")
    await asyncio.sleep(2)  
    print(f"Task {task_id} finished.")


async def main():
    tasks = [my_task(i) for i in range(3)]
    await asyncio.gather(*tasks)  


asyncio.run(main())

当三个my_task任务都处于睡眠状态时,从操作系统的角度来看,Python线程是处于就绪状态、阻塞状态还是运行状态?

如果Python线程正在“就绪”状态和“运行”状态之间切换,这是否意味着Python线程正在不断轮询这3个任务是否已经完成等待?如果真是这样的话,那不是浪费CPU资源吗?或者有什么机制可以解决这个问题吗?

我想知道我应该理解哪些概念才能掌握异步编程的原理。

python asynchronous
1个回答
0
投票
当三个my_task任务都处于睡眠状态时,从 从操作系统的角度来看,Python线程是处于就绪状态的 状态,阻塞状态,还是运行状态?

它在 select(或 poll、epoll 等,具体取决于操作系统)调用中被阻塞并超时(

链接到源代码),或者如果它还有其他任务要做,它将执行它们。

这是否意味着Python线程不断地轮询这3个 任务已经完成等待了吗?

没有。

© www.soinside.com 2019 - 2024. All rights reserved.