【问题标题】:Time a while loop python时间一个while循环python
【发布时间】:2013-01-22 10:04:22
【问题描述】:

我正在尝试在一个while循环中计时一个while循环,执行它所花费的总时间,并记录它每次循环所花费的时间。如果可能的话,我需要一种方法来使用我的代码来实现这一点,或者对我可能还不知道的不同概念持开放态度。

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

循环将打印一个时间,但我很确定它没有考虑嵌套的 while 循环睡眠时间。如何让 python 为两个 while 循环计时,它需要执行的每个循环(在本例中为 500)?

【问题讨论】:

  • @greg 如果你阅读我的代码,我正在做那个计时模块。我想弄清楚的比完整程序的基本时间更深。必须为每个循环计时。
  • 您的嵌套循环实际上并不是一个循环...循环体将始终只执行一次。此外,您打印出您要为secondsPause 睡觉,但实际上您并没有这样做。

标签: python time while-loop


【解决方案1】:

当您在初始循环之外设置 start 时,您保证您得到的 while 循环执行时间不正确。这就像说:

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)

【讨论】:

  • 太棒了,这正是我所需要的。不知何故,我的时间安排搞砸了。感谢您提出这个概念。
【解决方案2】:

在 python 中,您可以查看此文档https://docs.python.org/2/library/timeit.html
Stackoverflow 示例:How to use timeit module

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

在 Jupyter 笔记本中,

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

【讨论】:

    【解决方案3】:

    正确的想法,但是您对计时功能的位置有点偏离,我在这里更正了:

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

    【讨论】:

      【解决方案4】:

      你可以使用这个 pytictoc。使用 pip 或 conda 安装。阅读pytictoc 上的文档。它像 matlabs tic toc 一样工作。基本上只是用tic开始计时器并以toc结束。您可以直接打印或将其存储在新变量中。

      from pytictoc import TicToc
      def main()
          t = TicToc()  # create instance of class
          start_time= t.tic() #start timer
          while ():  
      
      
          #end of while loop
      
          end_time = t.toc()
          print("end_time", end_time)
      

      【讨论】:

      • 请在您的答案中添加一点文字。解释一下。代码只能帮助任何人。
      猜你喜欢
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      相关资源
      最近更新 更多