concurrent.futures 的个人超时
Individual timeouts for concurrent.futures
我在 concurrent.futures
中看到了两种指定超时的方法。
as_completed()
wait()
两种方法都处理 N 运行 个期货。
我想为每个未来指定一个单独的超时。
用例:
- 未来从数据库获取数据的超时时间为 0.5 秒。
- 未来从 HTTP 服务器获取数据的超时时间为 1.2 秒。
如何使用 concurrent.futures
处理这个问题?或者这个库不是正确的工具?
结论
- 据我所知,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()]
(或使用 sleep/check 的 while 循环或短超时等待)
我在 concurrent.futures
中看到了两种指定超时的方法。
as_completed()
wait()
两种方法都处理 N 运行 个期货。
我想为每个未来指定一个单独的超时。
用例:
- 未来从数据库获取数据的超时时间为 0.5 秒。
- 未来从 HTTP 服务器获取数据的超时时间为 1.2 秒。
如何使用 concurrent.futures
处理这个问题?或者这个库不是正确的工具?
结论
- 据我所知,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()]
(或使用 sleep/check 的 while 循环或短超时等待)