Skip to content

Commit 1831ecb

Browse files
committed
增加部分注释
1 parent 5720a08 commit 1831ecb

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

tornado/simple_coroutine.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff 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

0 commit comments

Comments
 (0)