python - 超时后 Tornado future 结果

标签 python tornado future coroutine concurrent.futures

这可能听起来有点奇怪,但是 Tornado 是否有可能在超时包装后完成执行 future ?

所以像这样:

try:
    result = yield gen.with_timeout(time.time() + 1, future)
except gen.TimeoutError as e:
    print('Timed out!')

所以在这种情况下,future 不会在超时前完成,但我希望它继续执行它拥有的任何可调用对象。

换句话说,我希望能够将它与 gen.WaitIterator 一起使用获得一组 future 的结果,如文档中所述:

If you need to get the result of each future as soon as possible, or if you need the result of some futures even if others produce errors, you can use WaitIterator.

这正是我正在寻找的,我希望每个 future 尽快得到结果,因为我有一些任务比其他任务花费的时间更长,但有一个异常(exception):那些缓慢的任务应该继续产生结果,以便我以后可以访问它们。

这可能吗?

最佳答案

with_timeout 不会取消底层的Future,所以可以重用:

future = do_something_async()
while True:
    try:
        result = yield gen.with_timeout(timedelta(seconds=1), future)
        break
    except gen.TimeoutError:
        print('tick')

将它与 WaitIterator 结合起来有点棘手,因为在前一个完成之前,您不能再次调用 WaitIterator.next

还要考虑 Tornado 4.2 中引入的队列类。这些通常可以产生比 WaitIterator 更干净的代码(并且它们具有内置超时支持而不是 with_timeout 包装器)。

关于python - 超时后 Tornado future 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30574012/

相关文章:

python - 如何在程序中启动 python 控制台(以便于调试)?

python - 如何将 Tornado 日志存储到文件中?

javafx - 如何在运行 5 秒后更新 JavaFX 应用程序中的文本框?

python - 有谁知道 Tornado Web 框架的异步 CouchBase 客户端?

java - 在 Java 中链接可变数量的 Promise (CompletableFuture)

scala - 对 future 作出 react

python - 计算一列中有多少个字符出现在另一列中( Pandas )

python - 调试时找不到模块

python - 使用 NTLM 身份验证的 Easy_install 或 pip

wsgi - gevent和 Tornado 的区别