"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的操作呢。
10
相似问题