def call(self, fn, *args, **kwargs):
self.begin(fn)
result = NO_RESULT
exc_info = None
start_time = now()
while True:
do = self.iter(result=result, exc_info=exc_info,
start_time=start_time)
if isinstance(do, DoAttempt):
try:
result = yield fn(*args, **kwargs)
exc_info = None
continue
except Exception:
result = NO_RESULT
exc_info = sys.exc_info()
continue
elif isinstance(do, DoSleep):
result = NO_RESULT
exc_info = None
yield self.sleep(do)
else:
raise gen.Return(do)
评论列表
文章目录