有没有办法在必要时通过时间填充来执行具有一致执行时间的 python 脚本?

Is there a way to execute a python script with consistent execution time by time padding if necessary?

我知道任何 python 程序的执行时间应取决于 OS 并且不能由用户控制。但我想要的是程序在执行时间低于必要时间时进入睡眠状态。

假设我有一个 python 程序,最后有一个打印语句。

def foo():
    ...
    ...
    return(ans)

print(foo())

我使用 timeit 评估了 foo 的执行时间范围。让它从 0.8 秒到 5.5 秒。为了安全起见,我选择整个脚本的执行时间为10秒。

如果 foo 的执行在 0.8 秒内完成,我希望程序在打印语句之前添加 9.2 秒的延迟。同样,如果执行在 5.5 秒内完成,则延迟 4.5 秒。

您可以通过两次调用 time.time() 来测量 foo() 的执行时间。然后,您可以使用 foo():

的计算执行时间来计算停止程序执行的时间量
import time

def foo():
    ...

start_time = time.time()
foo()
end_time = time.time()
if end_time - start_time < 10:
    time.sleep(10 - (end_time - start_time))

请注意,我们使用 time.sleep() 而不是 while 循环来反复检查是否已经过足够的时间,因为 busy waiting wastes resources.

您基本上只需要休眠一段时间,即最长时间和实际执行时间之间的差值。你也可以做一个通用的装饰器。

class padtime:
    def __init__(self, maxtime):
        self.maxtime = float(maxtime)

    def __call__(self, f):
        def _f(*args, **kwargs):
            start = time.time()
            ret = f(*args, **kwargs)
            end = time.time()
            delay = self.maxtime - (end - start)
            if delay > 0.0:
                time.sleep(delay)
            return ret
        return _f

@padtime(9.5)
def foo():
    ...
    return("Answer")

可以应用于任何函数。