睡眠()在python中是否足够准确?

问题描述 投票:0回答:1

我创建了一个python脚本,记录了PC全天的正常运行时间,并在第二天将使用情况存储在数据库中。

while 1:
        time.sleep(59.9)
        # now some code that increments the up-time value by 1 minute
        # my other code here

这是时间加法器功能的蓝图,它停止了59.9s的执行(我选择了59.9s而不是1分钟,因为递增的值需要写入2个单独的文件,所以我想给出大约100ms的时间顺序为了及时完成那些操作,然后将增加的值写入两个单独的文件,并继续这样做,直到系统关闭。 (此循环的每次迭代都表示已经过了一分钟)

之所以我选择sleep()而不是其他方式来节省/存储时间,是因为它在电源浪涌的情况下相当好,因为增加的正常运行时间是每分钟写入的。

我知道time.sleep()函数在一个微妙的持续时间(以毫秒或微秒)停止时间方面并不精确和准确。但是因为在我的代码中,时间停止了大约一分钟,所以我认为睡眠功能的偏差/不准确性不会很大。

我已经测试了上面的脚本大约2个月,结果非常有利。

所以我想知道它是否是一种存储正常运行时间的有效方式,或者存在更好的方法。

python time sleep
1个回答
1
投票

你可以尝试GetTickCount64功能。

例:

import ctypes
import datetime


def uptime_in_ms():
    lib = ctypes.windll.kernel32
    return lib.GetTickCount64()

def frmt(dt):
    d = dt.days
    _s = dt.seconds
    h, rem = divmod(_s, 3600)
    m, s = divmod(rem, 60)
    return f'{d} day(s), {h:02}h:{m:02}m:{s:02}s'

if __name__ == '__main__':
    ms = uptime_in_ms()
    dt = datetime.timedelta(milliseconds=ms)
    uptime = frmt(dt)
    print(uptime)

测试:

C:\Users\User>python Desktop/get_uptime.py
1 day(s), 00h:18m:51s

笔记:

  1. 支持的最低客户端 - Windows Vista
  2. 这只是一个示例,因此如果此库存在则无法进行验证
  3. 这个例子使用的是f-string格式 - Python 3.6+
© www.soinside.com 2019 - 2024. All rights reserved.