【发布时间】:2020-12-06 21:04:33
【问题描述】:
当循环中的某个步骤耗时过长时,如何跳过并继续?
以下是一些我想要的理想界面:
for x in some_collection:
with Timeout(2.5): # time out after 2.5 seconds
do_something(x)
会很好(甚至更好——但可能会更难):
with TimeoutLoopStep(2.5): # time out after 2.5 seconds
for x in some_collection:
do_something(x)
可能是一个等效的 timeout_loop_step 装饰器以这种方式使用迭代器:
timeout_loop_step(2.5)(map(do_something, some_collection))
--- 附录(编辑)以消除一些歧义---
我正在寻找的是一个上下文管理器和/或装饰器,如果它持续太长时间,它将中断迭代步骤的处理。
大多数与远程系统(例如 DB)通信的 API 都提供某种 timeout 参数,这意味着 “这样做,但如果您尝试超过 timeout,只需 phorgetaboutit 并继续下一项...”
但如果我没有提供这样的控制权,我想在外部使用可重用的上下文管理器或装饰器来实现它。
【问题讨论】:
-
这能回答你的问题吗? How to implement a watchdog timer in Python?
-
@Steve,你的链接和汤姆的第一个链接一样。
-
@TomMyddeltyn,第二个不是我要找的。第一个可能,但我需要尝试将它放在我在问题中提到的一种形式中,看看它是否真的有效。我将在我的问题中添加更多详细信息,以明确我在寻找什么。
-
不,
Timer解决方案 (WatchDog) 不是解决方案。计时器文档说“在指定的秒数后调用函数”。相比之下,我想要的是一种“在指定秒数后中断函数调用”的方法。
标签: python