我有一些关于新功能time.perf_counter()time.process_time()的问题.

对于前者,从文件中可以看出:

返回性能计数器的值(以小数秒为单位),即a clock with the highest available resolution以测量短持续时间.它确实包括睡眠期间经过的时间,并且是系统范围内的.返回值的参考点未定义,因此只有连续调用结果之间的差异才有效.

所有系统的"最高分辨率"都一样吗?或者它是否总是稍微依赖于,例如,我们使用的是linux还是windows

关于后者,time.process_time():

Return the value (in fractional seconds) of the sum of the system and user CPU time of the current process.它不包括睡眠时间.从定义上讲,这是一个全过程的过程.返回值的参考点未定义,因此只有连续调用结果之间的差异才有效.

我不明白,那些"系统时间"和"用户CPU时间"是什么?有什么区别?

推荐答案

在这种情况下,"时间"有两种不同的类型:绝对时间和相对时间.

绝对时间是"真实世界的时间",由time.time()返回,我们都习惯于处理它.通常从过go 的固定时间点(例如1970年1月1日UTC 00:00:00的UNIX纪元)以至少1秒的分辨率进行测量.现代系统通常提供毫秒或微秒分辨率.它由大多数计算机上的专用硬件维护,RTC(实时时钟)电路通常由电池供电,因此系统会在通电之间实时跟踪.这个"真实世界时间"也会根据您的位置(时区)和季节(夏令时)进行修改,或者表示为UTC(也称为GMT或祖鲁时间)的偏移量.

其次,还有相对时间,由time.perf_countertime.process_time返回.这种类型的时间与现实世界的时间没有明确的关系,因为这种关系是系统和实现特定的.它只能用于测量时间间隔,即与两个瞬间之间经过的时间成比例的单位值.这主要用于判断相对性能(例如,此版本的代码是否比该版本的代码运行得更快).

在现代系统中,它是使用CPU计数器来测量的,该计数器以与CPU硬件时钟相关的频率单调递增.计数器的分辨率高度依赖于系统的硬件,在大多数情况下,计数器的值不能可靠地与实际时间相关,甚至不能在系统之间进行比较.此外,每次CPU通电或复位时,计数器值都会复位.

time.perf_counter返回计数器的绝对值.time.process_time是一个从CPU计数器导出的值,但仅当给定进程在CPU上运行时才更新,可以分解为"用户时间",即进程本身在CPU上运行的时间,以及"系统时间",即操作系统内核代表进程在CPU上运行的时间.

Python-3.x相关问答推荐

Python ModuleNotFound错误,即使安装了模块

在numpy. linalg的qr之后使用scipy. integrate中的solve_ivp时出现了一个奇怪的错误

我有个问题继承遗产合伙人

是否可以使用参数对Flask重定向?

Python根据阈值对数字进行分组

在循环访问XML中的多个层时,xml.etree.Elementree Python3解析器不起作用

Django将任何查询显示为html表格

找到在指定列的另一个分组中存在重复的行.

移动所有列的数据帧值以使其单调递增

无法提出给定 for 循环的原因 (Python 3.11)

在python中将字符串写入文本文件

Snakemake 'run' 指令不产生错误信息

Python - 使用 OpenCV 将字节图像转换为 NumPy 数组

Python:遍历子列表

为什么包含类的名称不被识别为返回值函数注释?

如何模拟 Django 模型对象(及其方法)?

如何用pymongo连接远程mongodb

谁能给我一个 Python 3 中标准输入和标准输出的快速教程?

在动态链接库 Anaconda3\Library\bin\mkl_intel_thread.dll 中找不到序数 242

如何从Pandas 中的字符串中提取前8个字符