并发.futures的个别超时时间

14

我看到在 concurrent.futures 中有两种指定超时的方法:

  • as_completed()
  • wait()

这两种方法都可以处理N个正在运行中的future。

我想为每个future指定单独的超时时间。

用例:

  • 从DB获取数据的Future的超时时间为0.5秒。
  • 从HTTP服务器获取数据的Future的超时时间为1.2秒。

我该如何使用 concurrent.futures 处理这个问题?或者说这个库不适合做这件事吗?

结论

1个回答

4
你可以考虑自行实现以下内容:
wait(dbfutures + httpfutures, timeout=0.5)
[fut.cancel() for fut in bdfutures if not fut.done()]
wait(httpfutures, timeout=0.7)
[fut.cancel() for fut in httpfutures if not fut.done()]

(或者使用带有休眠/检查的while循环,或者等待一段短暂的超时时间)

是的,我认为这是唯一的解决方案。虽然不太好,但是可以解决问题。下次我想我会使用异步io:https://docs.python.org/3/library/asyncio-task.html#asyncio.sleep - guettli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接