译(四十)-Python获取程序运行时间

stackoverflow热门问题目录

如有翻译问题欢迎评论指出,谢谢。

如何获取 Python 程序的执行时间?

  • john2x asked:

    • 我有一个命令行形式的 Python 任务需要运行,如何确定它运行完成的具体耗时呢?
    • 我找到了 timeit 模块,但它好像只适合用于短的代码,可我希望能获取整个程序的运行时间。
  • Answers:

    • rogeriopvl – vote: 2444

    • Python 中最简单的方式:

    • import time
      start_time = time.time()
      main()
      print("--- %s seconds ---" % (time.time() - start_time))
    • 假定你的程序要花费至少十分一秒来运行。

    • 输出:

    • --- 0.764891862869 seconds ---
    • PaulMcG – vote: 237

    • 我用的是 timing.py 模块,把它放在 site-packages 包里,然后在自己模块插入 import timing 就能用了:

    • import atexit
      from time import clock
      
      def secondsToStr(t):
        return "%d:%02d:%02d.%03d" % \
            reduce(lambda ll,b : divmod(ll[0],b) + ll[1:],
                [(t*1000,),1000,60,60])
      
      line = "="*40
      def log(s, elapsed=None):
        print line
        print secondsToStr(clock()), '-', s
        if elapsed:
            print "Elapsed time:", elapsed
        print line
        print
      
      def endlog():
        end = clock()
        elapsed = end-start
        log("End Program", secondsToStr(elapsed))
      
      def now():
        return secondsToStr(clock())
      
      start = clock()
      atexit.register(endlog)
      log("Start Program")
    • 如果希望获取特定程序的用时的话,可以调用 timing.log 来显示。不过只使用 import timing 只会输出开始与结束时间,以及总用时(请忽略有点乱的 secondsToStr 函数,它只是用来把浮点数转为 hh:mm:ss.sss 的格式)。

    • 注:以上代码的 Python 3 版本见这里以及这里

    • steveha – vote: 221

    • 在 Linux 或 Unix 中可以这样:

    • $ time python yourprogram.py
    • 对于 Windows,可见 StackOverflow 问题: How do I measure execution time of a command on the Windows command line?(Windows如何确定命令行执行时间)

    • 获得更臃肿的输出:

    • $ time -v python yourprogram.py
        Command being timed: "python3 yourprogram.py"
        User time (seconds): 0.08
        System time (seconds): 0.02
        Percent of CPU this job got: 98%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.10
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 9480
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 1114
        Voluntary context switches: 0
        Involuntary context switches: 22
        Swaps: 0
        File system inputs: 0
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

How do I get time of a Python program\’s execution?

  • john2x asked:

    • I have a command line program in Python that takes a while to finish. I want to know the exact time it takes to finish running.
      我有一个命令行形式的 Python 任务需要运行,如何确定它运行完成的具体耗时呢?
    • I\’ve looked at the timeit module, but it seems it\’s only for small snippets of code. I want to time the whole program.
      我找到了 timeit 模块,但它好像只适合用于短的代码,可我希望能获取整个程序的运行时间。
  • Answers:

    • rogeriopvl – vote: 2444

    • The simplest way in Python:
      Python 中最简单的方式:

    • import time
      start_time = time.time()
      main()
      print("--- %s seconds ---" % (time.time() - start_time))
    • This assumes that your program takes at least a tenth of second to run.
      假定你的程序要花费至少十分一秒来运行。

    • Prints:
      输出:

    • --- 0.764891862869 seconds ---
    • PaulMcG – vote: 237

    • I put this timing.py module into my own site-packages directory, and just insert import timing at the top of my module:
      我用的是 timing.py 模块,把它放在 site-packages 包里,然后在自己模块插入 import timing 就能用了:

    • import atexit
      from time import clock
      
      def secondsToStr(t):
        return "%d:%02d:%02d.%03d" % \
            reduce(lambda ll,b : divmod(ll[0],b) + ll[1:],
                [(t*1000,),1000,60,60])
      
      line = "="*40
      def log(s, elapsed=None):
        print line
        print secondsToStr(clock()), '-', s
        if elapsed:
            print "Elapsed time:", elapsed
        print line
        print
      
      def endlog():
        end = clock()
        elapsed = end-start
        log("End Program", secondsToStr(elapsed))
      
      def now():
        return secondsToStr(clock())
      
      start = clock()
      atexit.register(endlog)
      log("Start Program")
    • I can also call timing.log from within my program if there are significant stages within the program I want to show. But just including import timing will print the start and end times, and overall elapsed time. (Forgive my obscure secondsToStr function, it just formats a floating point number of seconds to hh:mm:ss.sss form.)
      如果希望获取特定程序的用时的话,可以调用 timing.log 来显示。不过只使用 import timing 只会输出开始与结束时间,以及总用时(请忽略有点乱的 secondsToStr 函数,它只是用来把浮点数转为 hh:mm:ss.sss 的格式)。

    • Note: A Python 3 version of the above code can be found here or here.
      注:以上代码的 Python 3 版本见这里以及这里

    • steveha – vote: 221

    • In Linux or Unix:
      在 Linux 或 Unix 中可以这样:

    • $ time python yourprogram.py
    • In Windows, see this StackOverflow question: How do I measure execution time of a command on the Windows command line?
      对于 Windows,可见 StackOverflow 问题: How do I measure execution time of a command on the Windows command line?(Windows如何确定命令行执行时间)

    • For more verbose output,
      获得更臃肿的输出:

    • $ time -v python yourprogram.py
        Command being timed: "python3 yourprogram.py"
        User time (seconds): 0.08
        System time (seconds): 0.02
        Percent of CPU this job got: 98%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.10
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 9480
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 1114
        Voluntary context switches: 0
        Involuntary context switches: 22
        Swaps: 0
        File system inputs: 0
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

You may also like...

发表评论

您的电子邮箱地址不会被公开。

7 + 3 =