计时 Python 中的 while 循环

20 投票
4 回答
125394 浏览
提问于 2025-04-17 15:02

我想要测量一个包含在另一个循环里的循环的执行时间,也就是总共花了多长时间来运行这个循环,并记录每次循环所花的时间。如果可以的话,我希望能用我的代码来实现这个功能,或者我也愿意了解一些我可能还不知道的其他方法。

import random
import time
import sys

def main():


    looperCPU = 500
    start = time.time()
    while (looperCPU != 0):
        #start = time.time()

        #this is the computation for 3 secs
        time.sleep(3)
        random_number = random.randint(0,1000)

        #Send to printer for processing
        #.75 secs to 4.75 secs to generate a pause before printing
        secondsPause = random.uniform(.75,4.75)


        #This is the printer function
        printerLooper = True
        while printerLooper == True :
            print("Sleeping for ", secondsPause, " seconds")
            print(random_number)
            printerLooper = False


        #
        print("total time taken this loop: ", time.time() - start)
        looperCPU -= 1    



main()

这个循环会打印出时间,但我很确定它没有考虑到里面那个循环的休眠时间。我该怎么做才能让Python同时测量这两个循环的时间,每次循环都能记录下来(在这个例子中是500次)呢?

4 个回答

1

你的想法是对的,但你放置计时函数的位置有点不太对,我在这里帮你修正了一下:

import random
import time import sys

def main():

    looperCPU = 500
    start = time.time()
    while (looperCPU != 0):
       #this is the computation for 3 secs
       time.sleep(3)
       random_number = random.randint(0,1000)

       #Send to printer for processing
       #.75 secs to 4.75 secs to generate a pause before printing
       secondsPause = random.uniform(.75,4.75)


       #This is the printer function
       printerLooper = True
       myStart = time.time()
       while printerLooper == True :
          print("Sleeping for ", secondsPause, " seconds")
          print(random_number)
          printerLooper = False
          print("total time taken this loop: ", time.time() - myStart)    

       looperCPU -= 1    
main()
3

在Python中,你可以查看这个文档 https://docs.python.org/2/library/timeit.html
StackOverflow上的例子: 如何使用timeit模块

import timeit
timeit.timeit('"-".join(str(n) for n in range(100))', number=10000)

在Jupyter Notebook中,

%%timeit -n 100
import pandas as pd
s = pd.Series([101.00, 121.00])
summary = 0
for item in s:
    summary+=item
28

当你把开始时间设置在最初的循环外面时,你就保证了你得到的时间是错误的,也就是说你计算的这个循环执行的时间是不对的。这就像是在说:

program_starts = time.time()
while(True):
    now = time.time()
    print("It has been {0} seconds since the loop started".format(now - program_starts))

这是因为开始时间在整个执行过程中是固定不变的,而结束时间随着时间的推移在不断增加。把开始时间放在循环里面,可以确保随着程序的运行,开始时间也在不断增加。

while (looperCPU != 0):
    start_time = time.time()
    # Do some stuff
    while printerLooper == True :
        print("Sleeping for ", secondsPause, " seconds")
        print(random_number)
        printerLooper = False
    end_time = time.time()

    print("total time taken this loop: ", end_time - start_time)

撰写回答