在python中的函数上强制超时的首选解决方案

时间:2019-06-13 15:30:55

标签: python error-handling timeout

我有一个需要验证功能的场景,如果验证过程花费的时间超过了指定的超时时间,则将引发异常,否则它将在第一次成功时退出。

对于此请求,我首先使用生成器实现了一个计时器,如下所示:

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()

从理论上讲,这两个实现选项都应该起作用,但是我想知道您是否认为一个比另一个更好,或者两者都一样好。 另外,如果您有其他建议,请告诉我。

0 个答案:

没有答案