请稍等 ...
×

采纳答案成功!

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

asyncio 模拟 http 请求,asyncio.open_connection源码问题

老师您好,

asyncio.open_connection() 源码中,调用transport, _ = yield from loop.creat_connection(…),进一步调用 self.sock_connect()

sock_connect()最后 return(yield from fut), 想问一下,fut是future对象,yield from fut最后如何被激活? yield出的值应该给到了transport, 但后边的下划线是为什么?

从源码中没有看明白,请帮忙解答一下。

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

插入代码

1回答

bobby 2021-07-20 11:30:59
  1. yield form是被事件循环的loop激活的

  2. 下划线是python中的匿名变量。 说明 create_connetction返回了两个值,你只想用第一个值,第二个值不会用的时候一般为了少占用一个变量名就使用下划线代替了

0 回复 有任何疑惑可以回复我~
  • 提问者 慕九州4321812 #1
    老师您好,
    yield from fut 如果最后是被事件循环的loop激活的,这里有个疑问,之前我们讲到协程Lock锁时,
    acquire()函数中也有yield from fut,而yield from fut是被其他协程调用release()激活的。为什么之前的需要release激活,而这里用事件循环的loop激活?
    
    有些疑惑 请您帮忙解答下,多谢Bobby老师
    回复 有任何疑惑可以回复我~ 2021-07-20 12:39:13
  • bobby 回复 提问者 慕九州4321812 #2
    整个协程程序的运作都是靠loop来激活的,loop激活的过程就是不停的从epoll中获取到是哪个socket状态产生了变化,然后通过这个socket绑定的future去通过对应的方法去激活该future对应的协程继续执行
    回复 有任何疑惑可以回复我~ 2021-07-21 10:39:37
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信