gpt4 book ai didi

python - 超时后 Tornado future 结果

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:01 24 4
gpt4 key购买 nike

这可能听起来有点奇怪,但是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com