How do I get monotonic time durations in python?
That function is simple enough that you can use ctypes to access it:
#!/usr/bin/env python__all__ = ["monotonic_time"]import ctypes, osCLOCK_MONOTONIC_RAW = 4 # see <linux/time.h>class timespec(ctypes.Structure): _fields_ = [ ('tv_sec', ctypes.c_long), ('tv_nsec', ctypes.c_long) ]librt = ctypes.CDLL('librt.so.1', use_errno=True)clock_gettime = librt.clock_gettimeclock_gettime.argtypes = [ctypes.c_int, ctypes.POINTER(timespec)]def monotonic_time(): t = timespec() if clock_gettime(CLOCK_MONOTONIC_RAW , ctypes.pointer(t)) != 0: errno_ = ctypes.get_errno() raise OSError(errno_, os.strerror(errno_)) return t.tv_sec + t.tv_nsec * 1e-9if __name__ == "__main__": print monotonic_time()
As pointed out in this question, avoiding NTP readjustments on Linux requires CLOCK_MONOTONIC_RAW. That's defined as 4 on Linux (since 2.6.28).
Portably getting the correct constant #defined in a C header from Python is tricky; there is h2py, but that doesn't really help you get the value at runtime.