为什么time.process_time()和time.perf_counter()返回这样的不同值?

时间:2019-01-14 15:42:19

标签: python python-3.x timing

我想计时一段代码。查看时间模块,其中有对“ process_time()”和“ perf_counter()”的调用。从理论上讲,由于我们需要一个过程的开始时间和结束时间的增量,因此根据文档中的描述,两者中的任何一个都应该是合适的。我尝试了其中的每一个,并得到了截然不同的结果,这不能由流程运行方式中的外部影响来解释。

因此,我让测试代码在同一运行期间从process_time()和perf_counter()收集了值,并进行了比较,但它们仍然“根本”不同。无论使用哪个函数,增量都不应该相似吗?

在对同一过程进行计时时,由于存在一些舍入误差,我希望结果是相同的。但这以10的幂关闭。

示例结果:

rpn@R59  python [master ?] 0 $ ./testTiming.py
Returned Status: 200
Request (pc) took 0.218 sec.
Request (pt) took 0.038 sec.
rpn@R59  python [master ?] 0 $

正在测试的代码:

#! /usr/bin/env python3

import time

class Timer:
    def __enter__(self):
        self.start_pt = time.process_time()
        self.start_pc = time.perf_counter()
        return self

    def __exit__(self, *args):
        self.end_pt = time.process_time()
        self.end_pc = time.perf_counter()
        self.interval = self.interval_pc = self.end_pc - self.start_pc
        self.interval_pt = self.end_pt - self.start_pt


import requests

with Timer() as t:
    conn =requests.get('https://www.google.com')
    print("Returned Status: {}".format(conn.status_code))

print("Request (pc) took {:.03f} sec.".format(t.interval_pc))
print("Request (pt) took {:.03f} sec.".format(t.interval_pt))

0 个答案:

没有答案