当我没有明确等待未来协程(yield some_future_obj
)的结果时,我在龙卷风中静默传递异常时遇到问题,例如无限循环协程:
@gen.coroutine
def base_func():
@gen.coroutine
def tail_something():
raise
while True:
yield some_other_coroutine
base_func()
我也注意到这个话题已经讨论过了:参考这里或这里。问题是,如果我们不明确地等待未来的完成,future.result() 永远不会被调用,也永远不会引发异常。但是 tornado.concurrent 致力于使用 concurrent.futures 包。
现在我只是将 ioloop.add_future 挂在当前循环上并简单地执行 log.exception(future.result())。但我不喜欢这种方法,因为它有点吵(生产代码中的冗余行)。
请贡献您的想法,或者可能是一个真正的答案。