python 使用time.sleep() 来做定时任务,但是一段会有一段时间被跳过

问题描述

使用time做定时任务,但是一直会有一段时间被跳过,下面是我设置5分钟打印一次的日志。

clipboard.png

问题出现的环境背景及自己尝试过哪些方法

原来以为是每次sleep的时间比较长(原设置为睡58*60),后面改成上面的sleep(1),仍然有上面的问题。

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

    interval = 58 * 60
    count = interval
    while 1:
        count -= 1
        if count > 0:
            if count % 300 == 0:
                NORMAL_LOG(time.strftime(u"%Y-%m-%d %H:%M:%S", time.localtime(time.time())))
            # NORMAL_LOG("c:%d" % count)
            time.sleep(1)
        else:
            try:
                thread.start_new_thread(check_code_style, ())
            except Exception:
                tip_str = u"创建线程失败"
                NORMAL_LOG(tip_str)
                send_email_to_myself(tip_str)
            count = interval

你期待的结果是什么?实际看到的错误信息又是什么?

理想状态应该不会跳过这么长时间,也没有报任何错误,看了相关文档也没有什么发现。

阅读 17.8k
3 个回答
✓ 已被采纳新手上路,请多包涵

这个问题的原因后来我自己无意中发现了,是因为我的电脑的节能配置有问题。这里不能贴图片,所以我大概讲下。就是我在节能中配置了“如果可能,使硬盘进入睡眠”这个选项,当我将这个选项去掉后,再测试就正常了。我也没清楚为什么这个选项会造成这样的影响,如果是进入睡眠模式,不应该到凌晨还会自己再启动?

time.sleep并不是用来精准定时的
原文:
the suspension time may be longer than requested by an arbitrary amount because of the scheduling of other activity in the system.
由于系统中的其他活动的安排,暂停时间可能比任意量的请求长。
参考 https://docs.python.org/3/lib...
建议使用schedule模块

明显的逻辑问题,当count为0时,间隔时间 必然为你设置的间隔时间的2倍-设置的time.sleep的时间.
其次,当count被重置后的第一个执行的间隔时间,又得看count值 和 count % (num) 中num的余数值了

推荐问题
宣传栏