在Python中,哪种方法更好用于时间计算?time.clock()还是time.time()?哪一种提供更高的精度?
例如:
start = time.clock()
... do something
elapsed = (time.clock() - start)
对比。
start = time.time()
... do something
elapsed = (time.time() - start)
time.clock()
在Python 3.8中被移除,因为它具有平台相关的行为:
On Windows, this function returns wall-clock seconds elapsed since the first call to this function, as a floating point number
print(time.clock()); time.sleep(10); print(time.clock())
# Linux : 0.0382 0.0384 # see Processor Time
# Windows: 26.1224 36.1566 # see Wall-Clock Time
那么应该选择哪个函数呢?
处理器时间:这是指特定进程在 CPU 上执行活动的时间。睡眠、等待Web请求或仅执行其他进程的时间不会对此产生贡献。
time.process_time()
挂钟时间:这指的是“挂在墙上的时钟”的时间,即现实时间之外的时间。
使用 time.perf_counter()
time.time()
也测量挂钟时间,但可以重置,因此您可以返回到过去time.monotonic()
无法重置(单调=仅向前),但比time.perf_counter()
精度低正确答案是:它们的分数长度相同。
但如果subject
是time
,哪个更快?
一个小测试用例::
import timeit
import time
clock_list = []
time_list = []
test1 = """
def test(v=time.clock()):
s = time.clock() - v
"""
test2 = """
def test(v=time.time()):
s = time.time() - v
"""
def test_it(Range) :
for i in range(Range) :
clk = timeit.timeit(test1, number=10000)
clock_list.append(clk)
tml = timeit.timeit(test2, number=10000)
time_list.append(tml)
test_it(100)
print "Clock Min: %f Max: %f Average: %f" %(min(clock_list), max(clock_list), sum(clock_list)/float(len(clock_list)))
print "Time Min: %f Max: %f Average: %f" %(min(time_list), max(time_list), sum(time_list)/float(len(time_list)))
time.clock()
比time.time()
更好time.clock()
是内部计数器,因此不能在外部使用,有最大32位浮点数
的限制,如果不存储第一个/最后一个值,则无法继续计数。无法合并另一个计数器...比较Ubuntu Linux和Windows 7之间的测试结果。
在Ubuntu上
>>> start = time.time(); time.sleep(0.5); (time.time() - start)
0.5005500316619873
在Windows 7上
>>> start = time.time(); time.sleep(0.5); (time.time() - start)
0.5
time.clock()
已经弃用,建议使用perf_counter()
或process_time()
代替。 - Cody Piersalltimeit.default_timer()
来测量性能(它根据操作系统分配给time.time()
或time.clock()
)。 - jfstime.clock
和time.process_time
如何将进程使用的所有核心相加,但不包括子进程。另请参考这篇关于精度的讨论(当然,这取决于系统)。 - max