time.perf_counter()和time.process_time()有什么区别?

时间:2018-09-07 11:52:14

标签: python-3.x time

我正在使用Jupyter笔记本。我正在尝试用python计算Avogadro的数字需要多长时间。我发现time.perf_counter()time.process_time()模块将对此类工作有用。所以我尝试了两个,但是结果却完全不同。是什么导致这种差异?这是我的代码。

import time

a = 10 ** 5

def AvogadroCounting():
    i = 0
    while i <= a:
        i += 1

AvogadroCounting()

t_fract = time.perf_counter()  #time to count fraction of avogadro's number in Seconds


print(t_fract, 'secs')

我的笔记本电脑的时间为693920.393636181秒。

import time

a = 10 ** 5

def AvogadroCounting():
    i = 0
    while i <= a:
        i += 1

AvogadroCounting()

t_fract =  time.process_time()  #time to count fraction of avogadro's number in Seconds


print(t_fract, 'secs')

这给出了2048.768273秒。

2 个答案:

答案 0 :(得分:3)

perf_counter()应该测量一个流程要花费的真实时间,就像您使用秒表一样。

process_time()会为您提供计算机在当前进程上花费的时间,一台装有操作系统的计算机通常不会在任何给定进程上花费100%的时间。该计数器不应该计算CPU运行其他任何东西的时间。

在大多数情况下,perf_counter可能更可取,但如果您想比较代码效率,则process_time可能会有用。

答案 1 :(得分:2)

最值得注意的是time.process_time()在睡眠期间不会持续运行,而time.perf_counter()却会持续运行。

它们的官方名称是:

time.perf_counter()→浮动 返回性能计数器的值(以分数秒为单位),即具有最高可用分辨率的时钟,以测量较短的持续时间。它的确包含整个系统的睡眠时间。返回值的参考点是不确定的,因此仅连续调用的结果之间的差有效。

time.process_time()→浮动 返回当前进程的系统和用户CPU时间之和的值(以秒为单位)。它不包括睡眠期间经过的时间。根据定义,它是整个过程的。返回值的参考点是不确定的,因此仅连续调用的结果之间的差有效。

可以在https://docs.python.org/3/library/time.html#module-time

上阅读

sleep在这里是对time.sleep()的引用

def pc():
    start = time.perf_counter()
    time.sleep(1)
    print(time.perf_counter()-start)
def pt()
    start = time.process_time()
    time.sleep(1)
    print(time.time.process_time()-start)
pc()
0.99872320449432
pt()
0.0