预测循环的剩余时间

时间:2018-05-05 11:28:58

标签: python for-loop forecasting

晚安,

我正在尝试估计 剩余 时间到循环结束;我用过:

start = datetime.now()
progress = 0

for i in range(1000): 

    #do a few calculations

    progress += 1

    stop = datetime.now()
    execution_time = stop-start 

    remaining = execution_time * ( 1000 - progress )

    print("Progress:", progress, "%, estimated", remaining, "time remaining")

但它似乎能够正常工作,因为它可以达到几分钟,即使循环总共需要20秒,并且在到达结束时会迅速减少。

如何有效且正确地尝试预测 剩余 时间

4 个答案:

答案 0 :(得分:3)

只需使用const navSlide = () => { const burger = document.querySelector(".burger"); const nav = document.querySelector(".nav-links"); const navLinks = document.querySelectorAll(".nav-links li"); burger.addEventListener('click', () => { nav.classList.toggle('nav-active') navLinks.forEach((link, index) => { if(link.style.animation) { link.style.animation = "" } else { link.style.animation = `navLinkFade 0.5s ease forwards ${index / 7 + .4}s`; } }); burger.classList.toggle('toggle'); }); } navSlide(); 软件包:

tqdm

它将为您打印所有内容:

from tqdm import tqdm
for i in tqdm(range(10000)):
    dosomthing()

答案 1 :(得分:0)

您可以使用{3.3}中提供的time.perf_counter(),而不是将datetime.datetime.now()用于此类事件。来自文档:

  

返回性能计数器的值(以小数秒为单位),   即具有最高可用分辨率的时钟来测量短路   持续时间。它确实包括睡眠期间经过的时间   全系统。返回值的参考点未定义,   这样只有连续调用结果之间的差异   是有效的。

此外,您可以使用回车而不是换行进行打印,以便将进度报告打印在一行上。这是一个源自您的代码的简短演示。

from time import sleep, perf_counter

fmt = "  Progress: {:>3}% estimated {:>3}s remaining"
num = 1000

start = perf_counter()
for i in range(1, num + 1):
    # Simulate doing a few calculations
    sleep(0.01)

    stop = perf_counter()
    remaining = round((stop - start) * (num / i - 1))
    print(fmt.format(100 * i // num, remaining), end='\r')
print()

根据您的终端(和Python版本),您可能还需要将flush=True关键字arg添加到print调用,以便在发布进度报告时将其打印出来。

答案 2 :(得分:0)

我认为在这一行:

remaining = execution_time * ( 1000 - progress )

你应该划分execution_time / progress,因为你想知道完成1%进度需要多长时间。

remaining = execution_time/progress * ( 1000 - progress )

答案 3 :(得分:-1)

您对剩余时间的计算是错误的。如果execution_time步骤需要progress。那么1000步骤需要多少钱?

简单的交叉乘法为您提供总时间。从已经过去的时间中减去它,这将为您提供剩余的时间。

remaining_time = execution_time * 1000 / progress - execution_time
percent_complete =  (progress  / 1000) * 100     #You can simplify this if you like
print("Progress:", percent_complete , "%, Estimated", remaining_time, "time remaining")

此外,您的变量execution_time_1永远不会被定义