In CPython, the threading.Timer accuracy (waiting part) is based on a Condition.wait() call.
The Condition.wait() (implemented here) is done by successive sleep with a delay of min(delay * 2, remaining, .05)
where delay is originally set at 0.0005 # 500 us -> initial delay of 1 ms
. According to this implementation (that is OS independant) we can argue that the accuracy is at least the time.sleep accuracy.
But, the time.sleep() accuracy is based on the OS used (here is the implementation : floatsleep()), on Windows, it uses the WaitForSingleObject()
with a internal windows timer, on Linux it uses the select()
method.
At least, because apart the sleep delay, the charge of the OS could interfer with the reactivity of the python process, the scheduling algorithm can also have an influence on the accuracy.