请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

yield from疑问

老师您好,

这课的视频中,您说get_socket_data() yield出去的数据会返回给source = yield from get_socket_data()。但之前讲yield from是直接传递给主调用函数,这里不应是返回给def downloader(url)函数中source吧。def get_socket_data()函数如果最后return才会被stopIteration捕捉返回给def downloader(url)函数吧。

以下为本课代码:
import socket
def get_socket_data():
yield “bobby”

def downloader(url):
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.setblocking(False)

try:
    client.connect((host, 80))  # 阻塞不会消耗cpu
except BlockingIOError as e:
    pass

selector.register(self.client.fileno(), EVENT_WRITE, self.connected)
source = yield from get_socket_data()					### def downloader()会在这里暂停,直到get_socket_data()执行完并返回结果后这里会被唤醒并继续向下执行。
data = source.decode("utf8")
html_data = data.split("\r\n\r\n")[1]
print(html_data)

def download_html(html):
html = yield from downloader()

if name == “main”:
#协程的调度依然是 事件循环+协程模式 ,协程是单线程模式
pass

正在回答 回答被采纳积分+3

插入代码

1回答

bobby 2021-07-21 10:30:58

yield from是可以在子协程和主调用之间建立通道,可以通过send方法进行发送。但是返回的值还是你这里的接收方。如果返回的值直接给主调用方了那么代码就没有意义了

0 回复 有任何疑惑可以回复我~

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信