Python在n次重复后测量周期中的增量时间

时间:2018-03-31 05:46:17

标签: python time cycle measurement

拜托,我需要帮助:)我在python中有一个更长的周期,我想要每1000次迭代测量一次循环的总时间,以及最后1000次迭代之间的时间(我的意思是循环中1000和2000次迭代之间的差异)。

测量从开始调用delta的总时间和调用d2的1000x次迭代之间的时间的变量

start = time.time()
for i in range (0, iterations):
# ... logic in cycle ...
# calculating delta in each iteration
delta = time.time() - start
# Measuring time after every 1000 iterations
if (i + 1) % 1000 == 0:
    # Calculating  d2 time
    d2 = time.time() - start - d2
    print (str(i + 1) + ' items in ' + time.strftime("%H:%M:%S", time.gmtime(delta)) + ' (' + time.strftime("%H:%M:%S", time.gmtime(d2)) + ')' )

# After cycle
end = time.time() - start
print ('Total time: ' + time.strftime("%H:%M:%S", time.gmtime(end)))

结果如下:

1000 items in 00:00:07 (00:00:07) 2000 items in 00:00:13 (00:00:06) 3000 items in 00:00:20 (00:00:13) 4000 items in 00:00:27 (00:00:13) 5000 items in 00:00:34 (00:00:20) 6000 items in 00:00:41 (00:00:20) 7000 items in 00:00:48 (00:00:27) 8000 items in 00:00:55 (00:00:27) 9000 items in 00:01:01 (00:00:34) 10000 items in 00:01:08 (00:00:34) 11000 items in 00:01:15 (00:00:41) 12000 items in 00:01:22 (00:00:41)

似乎在第一个值中它是正常的(三分之一时间为7秒,在第二行中为13秒,这没关系)但是这个时间后来消失并且令人困惑。看看最后两行。 00:01:08和00:01:15之间的Delta约为7秒(如前2行),而不是41秒。也是最后一行...

我在哪里可以遇到问题?好吗?

我会很高兴得到任何提示或帮助。非常感谢你

此致

1 个答案:

答案 0 :(得分:2)

您还必须在每1000个周期更新您的d2。为清楚起见,我将旧delta命名为old_delta

import time

iterations = 5000
start = time.time()

old_delta = 0
for i in range(0, iterations):
    time.sleep(.002)
    # ... logic in cycle ...
    # calculating delta in each iteration
    delta = time.time() - start
    # Measuring time after every 1000 iterations
    if (i + 1) % 1000 == 0:
        # Calculating  d2 time
        d2 = delta - old_delta
        print(str(i + 1) + ' items in ' + time.strftime("%H:%M:%S", 
    time.gmtime(delta)) + ' (' + time.strftime("%H:%M:%S", time.gmtime(d2)) 
    + ')' )
        old_delta = delta


# After cycle
end = time.time() - start
print ('Total time: ' + time.strftime("%H:%M:%S", time.gmtime(end)))