File tree Expand file tree Collapse file tree 1 file changed +5
-0
lines changed
Expand file tree Collapse file tree 1 file changed +5
-0
lines changed Original file line number Diff line number Diff line change @@ -124,11 +124,13 @@ def run(self):
124124 value = self .future .result ()
125125 yielded = self .gen .send (value )
126126 except (StopIteration , Return ) as e :
127+ # 协程执行完成,不再注册回调
127128 self .result_future .set_result (_value_from_stopiteration (e ))
128129 self .result_future = None
129130 return
130131 except Exception :
131132 return
133+ # 协程未执行结束,继续使用 self.run() 进行驱动
132134 if not self .handle_yield (yielded ):
133135 return
134136 finally :
@@ -137,6 +139,9 @@ def run(self):
137139 def handle_yield (self , yielded ):
138140 self .future = yielded
139141 if not self .future .done ():
142+ # 给 future 增加执行结束回调函数,这样,外部使用 future.set_result 时会调用该回调
143+ # 而该回调是把 self.run() 注册到 IOLoop 的事件循环
144+ # 所以,future.set_result 会把 self.run() 注册到 IOLoop 的事件循环,从而在下一个事件循环中调用
140145 self .io_loop .add_future (
141146 self .future , lambda f : self .run ())
142147 return False
You can’t perform that action at this time.
0 commit comments