Windows睡眠对Python threading.Timer 的影响实测
伪测试代码:
def main():
logger.info('main start')
stop_run_forever()
if __name__ == "__main__":
logger.info('start')
t = Timer(time_to_wait('20:06:30'), main)
t.start()
run_forever() # time.sleep()
运行代码后立即将电脑睡眠:
打印出的日志:
[2023-06-15 20:03:16,700] [general_logger] start
[2023-06-15 20:12:30,636] [general_logger] main start
查看系统事件
[2023-06-15 20:09:25] kernel-Power 507
[2023-06-15 20:03:22] kernel-Power 506
应等待时长:
20
:
06
:
30
−
20
:
03
:
16
,
700
=
3
′
1
3
′
′
,
300
20:06:30 - 20:03:16,700 = 3'13'',300
20:06:30−20:03:16,700=3′13′′,300
实际等待时长:
(
20
:
12
:
30
−
20
:
03
:
16
)
−
(
20
:
09
:
25
−
20
:
03
:
22
)
=
3
′
1
1
′
′
(20:12:30 - 20:03:16) - (20:09:25 - 20:03:22)= 3'11''
(20:12:30−20:03:16)−(20:09:25−20:03:22)=3′11′′
实测Windows睡眠并唤醒后,threading.Timer 创建的线程会继续等待应等待的时长后继续执行;实际睡眠冻结线程的时间会略短于“事件查看器”中日志显示的事件间隔。