找回密码
 立即注册
首页 群组 IT互联网 网站 程序园子 解决Python time.sleep()函数短时间延时不准确,实现延 ...

解决Python time.sleep()函数短时间延时不准确,实现延时误差小于0.01ms

任娅翠 2025-5-29 18:15:03
time.sleep()函数能够暂停当前线程的运行,实现延时功能,而window系统中使用time.sleep()函数暂停当前线程并再次执行当前线程需要一定的时间(大约在ms级)。
time.perf_counter()函数的返回值为系统已经运行的时间(float类型,单位:s),该时间具有非常高的分辨率和精度,因此可以测量较短的持续时间,测量范围包含time.sleep()的休眠时间。
time.perf_counter_ns()函数则是将返回值改为了int类型,单位变为了ns。
不使用time.sleep()函数的运行情况
点击查看代码
  1. import time
  2. a = time.perf_counter_ns()
  3. # time.sleep(0.001)
  4. b = time.perf_counter_ns()
  5. print("a = %.4f" % (a/1000000), " ms\n", "b = %.4f" % (b/1000000), " ms", sep='')
  6. print("b-a = %.4f" % ((b-a)/1000000), "ms")
  7. 运行结果为:
  8. a = 960481122.4417 ms
  9. b = 960481122.4420 ms
  10. b-a = 0.0003 ms
复制代码
不使用time.sleep()函数时,多次尝试后,执行time.perf_counter_ns()函数所耗费的时间均10ms,多次尝试的结果均在10ms左右,这表明time.sleep()函数不能准确实现ms级的短时间延时。解决方法:不采用time.sleep()函数,直接通过多次循环实现延时
点击查看代码
  1. import time
  2. a = time.perf_counter_ns()
  3. sleep(0.001)
  4. b = time.perf_counter_ns()
  5. print("a = %.4f" % (a/1000000), " ms\n", "b = %.4f" % (b/1000000), " ms", sep='')
  6. print("b-a = %.4f" % ((b-a)/1000000), "ms")
  7. 运行结果为:
  8. a = 960910032.3047 ms
  9. b = 960910046.0363 ms
  10. b-a = 13.7316 ms
复制代码
目标延时为100.01ms,实际延时为100.0161ms,相差