3

我正在编写一个将在命令行中运行的 Python 脚本。这个想法是从用户那里获取命令,运行它,然后提供用户提供的命令的挂钟时间和 CPU 时间。请参阅下面的代码。

#!/usr/bin/env python 
import os
import sys

def execut_cmd(cmd_line):
    utime = os.system('time '+cmd_line)
    # Here I would like to store the wall-clock time in the Python variable 
    # utime.
    cputime = os.system('time '+cmd_line)
    # Here the CPU time in the cputime variable. utime and cputime are going to 
    # be used later in my Python script. In addition, I would like to silence the 
    # output of time in the screen.

execut_cmd(sys.argv[1]) 
print ('Your command wall-clock time is '+utime)
print ('Your command cpu time is '+ cputime)

我怎样才能做到这一点?此外,如果有比使用“时间”更好的方法,我愿意尝试。

4

2 回答 2

5

来自Python Documentation for wall time

...在 Windows 上,time.clock() 具有微秒粒度,但 time.time() 的粒度是 1/60 秒。在 Unix 上,time.clock() 的粒度为 1/100 秒,而 time.time() 则更精确。在任一平台上,default_timer() 测量的是挂钟时间,而不是 CPU 时间。这意味着在同一台计算机上运行的其他进程可能会干扰计时。

对于挂钟时间,您可以使用 timeit.default_timer() 来获取具有上述最佳粒度的计时器。

从 Python 3.3 及更高版本开始,您可以使用 time.process_time() 或 time.process_time_ns() 。以下是process_time 方法的文档条目:

返回当前进程的系统和用户 CPU 时间之和的值(以秒为单位)。它不包括睡眠期间经过的时间。根据定义,它是进程范围的。返回值的参考点是未定义的,因此只有连续调用的结果之间的差异才有效。

于 2019-06-19T16:51:17.303 回答
1

我花了很少的时间在 Linux 系统上使用计时功能。我观察到

  1. timeit.default_timer()time.perf_counter()在数字上给出相同的结果。
  2. 此外,在测量时间间隔的持续时间时timeit.default_timer()time.perf_counter()time.time()都几乎给出了相同的结果。因此,这意味着这些函数中的任何一个都可用于测量任何过程的经过时间壁时间
  3. 我想我还应该提到与其他人之间的区别在于time.time()它以秒为单位给出当前时间,从19701 月 1 日凌晨 12:00开始
  4. time.clock()并且time.process_time()也给出相同的数值
  5. time.process_time()最适合测量cpu 时间,因为time.clock()在 python 3 中已弃用
于 2020-01-06T17:11:41.713 回答