sleep()在python中足够准确吗?

时间:2019-04-30 05:23:11

标签: python time sleep

我创建了一个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的时间时间,以便及时完成这些操作),然后将递增的值写入两个单独的文件中,并继续这样做直到系统关闭。 (此循环的每一次迭代都表示已过去了1分钟)

之所以选择sleep()而不是通过其他方式来节省时间/存储时间,是因为它能很好地应对电涌情况,因为每分钟写入的运行时间都会增加。

我知道,time.sleep()函数并不是一种精确的函数,它涉及到在微妙的时间内(以毫秒或微秒为单位)暂停时间。但是由于在我的代码中时间被暂停了大约一分钟,所以我相信睡眠功能的偏差/不准确不会很大。

我已经对上述脚本进行了大约2个月的测试,结果非常令人满意。

所以我想知道这是存储正常运行时间的有效方法,还是存在一种更好的方法来存储正常运行时间。

1 个答案:

答案 0 :(得分: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字符串格式-Python 3.6 +