Py学习  »  Python

有没有一种方法可以在必要的情况下执行一个python脚本,并在每次执行时进行一致的填充?

pani3610 • 3 年前 • 1452 次点击  

我知道任何python程序的执行时间都取决于操作系统,不能由用户控制。但是我想要的是,如果执行时间低于必要的时间,程序就进入睡眠状态。

假设我有一个python程序,它的末尾有一个print语句。

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

print(foo())

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129306
 
1452 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Keith
Reply   •   1 楼
Keith    3 年前

你基本上只需要在最长时间和实际执行时间之间的差异中睡眠。你也可以做一个通用的装饰师。

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

这可以应用于任何函数。

BrokenBenchmark
Reply   •   2 楼
BrokenBenchmark    3 年前

你可以测量 foo() 用两个电话 time.time() 。然后,您可以使用计算的执行时间来计算暂停程序执行的时间量 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 .