返回介绍

2.5 用 UNIX 的 time 命令进行简单的计时

发布于 2024-01-25 21:44:08 字数 1987 浏览 0 评论 0 收藏 0

现在让我们脱离Python使用类UNIX操作系统的标准系统功能。下面这条命令会记录程序执行所耗费的的各方面时间,且不在意代码的内部结构:

$ /usr/bin/time -p python julia1_nopil.py
Length of x: 1000
Total elements: 1000000
calculate_z_serial_purepython took 12.7298331261 seconds
real 13.46
user 13.40
sys 0.04

注意我们特地使用了/usr/bin/time而不是time,也就是说我们使用的是系统命令的time而不是那个更加简单而没用的shell内建版本的time。如果你用time --verbose,结果得到了一个错误,那么你使用的可能就是shell内建的time而不是系统命令的time。

通过使用-p开关,我们得到了3个结果:

real记录了整体的耗时。

user记录了CPU花在任务上的时间,但不包括内核函数耗费的时间。

sys记录了内核函数耗费的时间。

对user和sys相加就得到了CPU总共花费的时间。而这个时间和real的差则有可能是花费在等待IO上,也可能是你的系统正在忙着运行其他任务因此影响了你的测量。

time并不是专为Python脚本使用的。它还包括了启动python解释器的时间,如果你会启动很多新进程(而不是一个长期运行的单一进程),这个时间可能会很长。如果你会经常跑一些临时脚本,它们的启动时间占了整体运行时间的很大一部分,那么time更适合测量这种情况。

我们可以打开--verbose开关来获得更多输出信息:

$ /usr/bin/time --verbose python julia1_nopil.py
Length of x: 1000
Total elements: 1000000
calculate_z_serial_purepython took 12.3145110607 seconds
    Command being timed: "python julia1_nopil.py"
    User time (seconds): 13.46
    System time (seconds): 0.05
    Percent of CPU this job got: 99%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:13.53
    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): 131952
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 58974
    Voluntary context switches: 3
    Involuntary context switches: 26
    Swaps: 0
    File system inputs: 0
    File system outputs: 1968
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0

这里最有用的指标可能是Major (requiring I/O) page faults,因为它指示了操作系统是否由于RAM中的数据不存在而需要从磁盘上读取页面。而这会带来速度上的惩罚。

我们的例子中对于代码和数据的需求较少,所以不会发生内存缺页错误。如果你有一个内存密集型进程,或多个需要分配和使用大量RAM的进程,你就会发现这个命令可以告诉你哪个进程会因为一部分RAM被交换到磁盘上这一额外的操作系统级别的磁盘访问而导致速度的下降。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文