我有一个需要验证功能的场景,如果验证过程花费的时间超过了指定的超时时间,则将引发异常,否则它将在第一次成功时退出。
对于此请求,我首先使用生成器实现了一个计时器,如下所示:
def timer(sec):
start=time.time()
curr=start
while curr-start < sec:
yeild curr
curr=time.time()
然后,我通过大约两种可能的实现来强制验证器函数超时。
首次实施:
第一个实现假定验证器函数对于成功/失败将返回True / False:
def validator_function():
<do something>
if success:
return True
else:
return False
验证器函数的超时执行如下所示:
def validate_function_with_timeout(timeout_in_sec):
for _ in timer(timeout_in_sec):
if validator_function():
break
else:
raise Exception("Validation did not succeed during '{}' seconds".format(timeout_in_sec))
第二种实施方式:
第二个实现假定验证器函数将立即抛出异常,以防不符合条件:
def validator_function():
<do something>
assert <condition> , "Validation failed"
验证器函数的超时执行如下所示:
def validate_function_with_timeout(timeout_in_sec):
for _ in timer(timeout_in_sec):
try:
validator_function()
break
except:
print("Validation did not succeed at this retry")
else:
validator_function()
从理论上讲,这两个实现选项都应该起作用,但是我想知道您是否认为一个比另一个更好,或者两者都一样好。 另外,如果您有其他建议,请告诉我。