How do I get monotonic time durations in python? How do I get monotonic time durations in python? python python

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.