我正在使用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秒。
答案 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