并发的各个超时


问题内容

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

  • as_completed()
  • wait()

两种方法都处理N个运行的期货。

我想为每个将来指定一个单独的超时。

用例:

  • 将来从数据库获取数据的超时时间为0.5秒。
  • 将来从HTTP服务器获取数据的超时时间为1.2秒。

我该如何处理concurrent.futures?还是这个库不是正确的工具?

结论

  • AFAIK mdurant解决方案是一个很好的解决方法。
  • 我想下一次我将使用其他库。也许asyncio对此有更好的支持。请参阅:https//docs.python.org/3/library/asyncio-task.html#asyncio.sleep

问题答案:

如何实现自己的:

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循环或较短的等待时间)