Речь идет о точности.Каждые часы в Python имеют соответствующую точность, которая объясняет разницу, которую вы испытываете.Давайте посмотрим детали часов от Macbook Pro 2018 с MacOS Mojave.Python3.7 устанавливается через brew:
In [41]: time.perf_counter_ns()
Out[41]: 10464788941125
In [42]: time.process_time_ns()
Out[42]: 22502272000
In [43]: time.time_ns()
Out[43]: 1545312118561931000
In [44]: time.monotonic_ns()
Out[44]: 10477720411470
In [45]: time.get_clock_info('perf_counter')
Out[45]: namespace(adjustable=False, implementation='mach_absolute_time()', monotonic=True, resolution=1e-09)
In [46]: time.get_clock_info('process_time')
Out[46]: namespace(adjustable=False, implementation='clock_gettime(CLOCK_PROCESS_CPUTIME_ID)', monotonic=True, resolution=1.0000000000000002e-06)
In [47]: time.get_clock_info('time')
Out[47]: namespace(adjustable=True, implementation='clock_gettime(CLOCK_REALTIME)', monotonic=False, resolution=1.0000000000000002e-06)
In [48]: time.get_clock_info('monotonic')
Out[48]: namespace(adjustable=False, implementation='mach_absolute_time()', monotonic=True, resolution=1e-09)
Обратите внимание на implementation
и resolution
.Вот та же информация, но от виртуальной машины, работающей на сервере Ubuntu:
>>> time.perf_counter_ns()
4094438601446186
>>> time.process_time_ns()
35344006
>>> time.time_ns()
1545312252720125938
>>> time.monotonic_ns()
4094449881239590
>>> time.get_clock_info('perf_counter')
namespace(adjustable=False, implementation='clock_gettime(CLOCK_MONOTONIC)', monotonic=True, resolution=1e-09)
>>> time.get_clock_info('time')
namespace(adjustable=True, implementation='clock_gettime(CLOCK_REALTIME)', monotonic=False, resolution=1e-09)
>>> time.get_clock_info('process_time')
namespace(adjustable=False, implementation='clock_gettime(CLOCK_PROCESS_CPUTIME_ID)', monotonic=True, resolution=1e-09)
>>> time.get_clock_info('monotonic')
namespace(adjustable=False, implementation='clock_gettime(CLOCK_MONOTONIC)', monotonic=True, resolution=1e-09)
Как вы можете видеть, каждый такт имеет различную реализацию и точность, которая зависит от платформы.В MacOS точность часов для часов process_time
и time
установлена на 1e-06
, что составляет микросекунды.Это объясняет разницу.
Вы также можете использовать time.clock_getres
, чтобы получить точность:
In [51]: time.clock_getres(time.CLOCK_REALTIME)
Out[51]: 1.0000000000000002e-06
Дополнительная информация: