我个人的理解
代码一
event_loop 里面只有一个任务 main,CPU 执行代码顺序就是
main()
main: print('before await')
main: await worker_1()
worker_1()
worker_1: await asyncio.sleep(1)到这里的时候有 IO 事件,让出 CPU 给 event_loop,但是 event_loop 没有其他的任务,所说 CPU 会空置等待 asyncio.sleep(1)完成再切换到 worker_1 中继续执行,接下来都是这样,所以这整个过程是同步执行的
代码二
一开始有一个 main 任务
main()
main: task1 = asyncio.create_task(worker_1())
main: task2 = asyncio.create_task(worker_2())
main: print('before await') 这里 main 并没有让出 CPU,所以先打印 before await
main: await task1 这时 CPU 直接切换到了 task1,接下来
worker_1: print('worker_1 start')
worker_1: await asyncio.sleep(1)直到这里出现 IO 事件才会把 CPU 让出给 event_loop,event_loop 中 main 和 task1 都是 await 状态,CPU 切换到 task2 任务
worker_2: print('worker_2 start')
worker_2: await asyncio.sleep(2)出现 IO 时间切回 event_loop,三个任务都在 await,所以 CPU 会空置 1S 等待 asyncio.sleep(1),然后
worker_1: print('worker_1 done')
main: print('awaited worker_1')
main: await task2 等待 asyncio.sleep(2)结束
worker_2: print('worker_2 done')
main: print('awaited worker_2')
今天有课,一个推荐优质网课,返利优惠买课的公众号
回复你需要购买课程的关键词,例如“前端”即可得到购买链接,通过链接购买成功后,点击下方菜单栏申请奖学金。
新用户首次关注 送你 1 张 10 元多返券,可用于以下 2 个课程:
《 Web 协议详解与抓包实战》原价 129 课程,特价 99 元,返 24 元,再加 10 元多返券,总共返 34 元,到手 65 元。
《深入浅出计算机组成原理》原价 99 课程,特价 68 元,返 24 元,再加 10 元多返券,总共返 34 元,到手 34 元。
今天有课活动码:youke414715