Python中time.sleep(0.001)真的只等待1毫秒吗?

在windows上,进行简单的编程验证上述问题。

import time

while True:
    st = time.time()
    time.sleep(0.001)
    et = time.time()
    print('dt={dt}'.format(dt=et - st))

返回结果:

dt=0.001966238021850586
dt=0.001010894775390625
dt=0.0020058155059814453
dt=0.0010018348693847656
dt=0.001966238021850586
dt=0.0020215511322021484
dt=0.0019714832305908203
dt=0.0010178089141845703
dt=0.0019807815551757812
dt=0.0010159015655517578
dt=0.001965761184692383

大部分时长都在2ms左右。而且即便将0.001改至更小,仍是2ms,这与操作系统有关,具体机制未做深入研究。如果需要精确定时需要注意这个问题。

下面的代码用在接收线程中,当连续1秒钟没有数据是会抛出警告,由于需要响应外部stop或者pause操作,所以sleep的时间片段都不能太长。

        no_frame_time = 0
        while True:
            if self._stop:
                logger.info(f"xxxx stop.")
                break

            if self._pause:
                time.sleep(0.01)
                continue

            if len(self.msg_deque) == 0:
                st = time.time()
                time.sleep(0.001)
                # no_frame_time += 0.001 # 这写法由于sleep不准确,导致最早no_frame_time与实际值误差特别大
                et = time.time() - st
                no_frame_time += et  # 此处是累积时间
                if no_frame_time > 1:
                    logging.warning("xxxx not arrived in last second.")
                    self.fps_signal.emit(0)
                    no_frame_time = 0
                continue
            else:
                no_frame_time = 0
            
            # ... 省略任务主体
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值