2. Python Coroutines
Present and Future
Agenda:
• Coroutines are wonderful for async
• …but weird.
• Understanding the weirdness.
• Coroutine Kung Fu.
• The Future!
18. # part of the Tornado framework
class Runner(object):
def __init__(self, make_generator):
self.gen = make_generator()
# Starts done, with result None
self.future = NullFuture()
19. class Runner(object):
# ... "recurse"
def run(self):
while True:
if not self.future.done():
self.future.add_done_callback(self.run)
return
value = self.future.result()
try:
self.future = self.gen.send(value)
except (StopIteration, Return) as e:
return