如何与UTC计时器进行循环同步并在每分钟执行一次?

use*_*648 5 python sync timer clock

我希望在datetime.utcnow().second零时每分钟执行一次循环.到目前为止,我有这个

while True:
    while datetime.utcnow().second != 0: pass
    do_something()
Run Code Online (Sandbox Code Playgroud)

但问题是我浪费了cpu进程.我会使用time.sleep(60),但我不知道它将如何与UTC时钟同步,因为time.sleep(60)可能会随着时间的推移偏离官方UTC时间.

nne*_*neo 11

我能想到的最佳方式是睡到下一分钟:

while True:
    sleeptime = 60 - datetime.utcnow().second
    time.sleep(sleeptime)
    ...
Run Code Online (Sandbox Code Playgroud)

如果你想要非常精确:

while True:
    t = datetime.utcnow()
    sleeptime = 60 - (t.second + t.microsecond/1000000.0)
    time.sleep(sleeptime)
    ...
Run Code Online (Sandbox Code Playgroud)

这精确到达下一分钟所需的时间,精确到亚秒级.

编辑修复分钟翻转错误.