threading.Timer 时间精度
Python的threading.Timer的时间准确性受哪些因素影响呢?
它是否跟使用的操作系统有关?
它是否跟使用的Python版本有关?
它是否跟设置的时间间隔有关?
怎么才能测试它的准确性呢?
有没有现成的测试结果可以参考?
1 个回答
8
在CPython中,线程定时器的准确性是基于一个叫做Condition.wait()的调用。
这个Condition.wait()的实现是通过不断地睡眠来完成的,睡眠的时间是min(delay * 2, remaining, .05)
,其中delay最开始设置为0.0005 # 500微秒 -> 初始延迟为1毫秒
。根据这个实现(与操作系统无关),我们可以说它的准确性至少和time.sleep()的准确性一样。
不过,time.sleep()的准确性又是依赖于所用的操作系统的。在Windows上,它使用WaitForSingleObject()
和内部的Windows定时器,而在Linux上则使用select()
方法。
之所以说至少,是因为除了睡眠的延迟,操作系统的负载也可能影响Python进程的反应速度,调度算法也可能对准确性产生影响。