Patch version 3:
- fix compilation on non-Linux (e.g. on FreeBSD and OpenBSD)
- time.monotonic() uses GetTickCount/GetTickCount64 on Windows
- clock_getres() fills the accuracy field instead of the resolution field of time.get_clock_info()
Clock information on different operating systems.
Linux (Fedora 16) on x86_64:
>>> pprint.pprint(time.get_clock_info('clock'))
{'accuracy': 1e-06,
'function': 'clock()',
'is_adjusted': False,
'is_monotonic': True,
'resolution': 1e-06}
>>> pprint.pprint(time.get_clock_info('highres'))
{'accuracy': 1e-09,
'function': 'clock_gettime(CLOCK_MONOTONIC_RAW)',
'is_adjusted': False,
'is_monotonic': True,
'resolution': 1e-09}
>>> pprint.pprint(time.get_clock_info('monotonic'))
{'accuracy': 1e-09,
'function': 'clock_gettime(CLOCK_MONOTONIC_RAW)',
'is_adjusted': False,
'is_monotonic': True,
'resolution': 1e-09}
>>> pprint.pprint(time.get_clock_info('time'))
{'accuracy': 1e-09,
'function': 'clock_gettime(CLOCK_REALTIME)',
'is_adjusted': True,
'is_monotonic': False,
'resolution': 1e-09}
FreeBSD 8.2 on x86_64:
>>> pprint.pprint(time.get_clock_info('clock'))
{'accuracy': 0.0078125,
'function': 'clock()',
'is_adjusted': False,
'is_monotonic': True,
'resolution': 0.0078125}
>>> pprint.pprint(time.get_clock_info('highres'))
{'accuracy': 1.1000000000000001e-08,
'function': 'clock_gettime(CLOCK_MONOTONIC)',
'is_monotonic': True,
'resolution': 1e-09}
>>> pprint.pprint(time.get_clock_info('monotonic'))
{'accuracy': 1.1000000000000001e-08,
'function': 'clock_gettime(CLOCK_MONOTONIC)',
'is_monotonic': True,
'resolution': 1e-09}
>>> pprint.pprint(time.get_clock_info('time'))
{'accuracy': 1.1000000000000001e-08,
'function': 'clock_gettime(CLOCK_REALTIME)',
'is_adjusted': True,
'is_monotonic': False,
'resolution': 1e-09}
OpenBSD on x86_64:
>>> pprint.pprint(time.get_clock_info('clock'))
{'accuracy': 0.01,
'function': 'clock()',
'is_adjusted': False,
'is_monotonic': True,
'resolution': 0.01}
>>> pprint.pprint(time.get_clock_info('highres'))
{'accuracy': 0.01,
'function': 'clock_gettime(CLOCK_MONOTONIC)',
'is_monotonic': True,
'resolution': 1e-09}
>>> pprint.pprint(time.get_clock_info('monotonic'))
{'accuracy': 0.01,
'function': 'clock_gettime(CLOCK_MONOTONIC)',
'is_monotonic': True,
'resolution': 1e-09}
>>> pprint.pprint(time.get_clock_info('time'))
{'accuracy': 0.01,
'function': 'clock_gettime(CLOCK_REALTIME)',
'is_adjusted': True,
'is_monotonic': False,
'resolution': 1e-09}
Python 32 bits on Windows 64 bits:
>>> pprint.pprint(time.get_clock_info('clock'))
{'accuracy': 1e-08,
'function': 'QueryPerformanceCounter()',
'is_adjusted': False,
'is_monotonic': True,
'resolution': 1e-08}
>>> pprint.pprint(time.get_clock_info('highres'))
{'accuracy': 1e-08,
'function': 'QueryPerformanceCounter()',
'is_adjusted': False,
'is_monotonic': True,
'resolution': 1e-08}
>>> pprint.pprint(time.get_clock_info('monotonic'))
{'accuracy': 0.015600099999999999,
'function': 'GetTickCount()',
'is_adjusted': False,
'is_monotonic': True,
'resolution': 0.001}
>>> pprint.pprint(time.get_clock_info('time'))
{'accuracy': 0.015600099999999999,
'function': 'GetSystemTimeAsFileTime()',
'is_adjusted': True,
'is_monotonic': False,
'resolution': 1e-07}
Some remarks:
- these 4 platforms provide a monotonic clock
- these 4 platforms provide the accurary of the 4 clocks (it looks like Linux is cheating)
- on OpenBSD, time.highres() resolution is not so "high". It has only an accuracy of 10 ms.
- as expected, the accuracy is very different from the resolution in some cases (ex: 0.0156 vs 1e-07 for time.time() on Windows) |