"yield from future"暂停的大致原理

来源:13-8 asyncio同步和通信

慕九州4321812

2021-07-28

想问一下"yield from future"暂停的大致原理:

yield from future有向Task发送信息吗?
如果TASK有接收到信息,是什么信息呢?

"yield from future"暂停的大致原理请帮忙讲解一下,谢谢

写回答

1回答

bobby

2021-07-29

其实课程中已经讲这里的原理讲解过了,就是整个函数不再是普通的函数了。而是可以暂停并记录下当前的执行行数的类似for循环的调用了,遇到yield from之后就记录下当前的函数执行到哪一行了,然后将这个记录保存下来并交给loop循环,loop循环就是将这个保存下的函数中的io,比如socket请求包装成一个socket注册交给epoll去执行。loop也就是不停的去包装socket注册和socket注销,然后不停的监听socket的事件,比如可写了。比如可读了。可读的话,就说明服务器有数据回来了。那么就通过这个socket注册的当时的信息。当时注册的时候是将future包装进去的。future可是记录了这个是哪个函数的那个一行的。其实也就是知道是哪个yield from,当socket可读以后读出来数据然后将找到执行的函数,然后把结果返回给你的上面的接收变量。然后loop这个时候也不去监听epoll了,而是转而去执行yield from之后的逻辑,这就造成了,如果你这个写错中有一段代码非常耗时,当然不是io耗时,而是cpu耗时。这个时候epoll即使有socket事件了。也无法去处理了。因为你现在忙着处理当前的非io的操作呢。

1
0

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程