Python定时器对支持的最长时间有限制吗? 导入线程 导入操作系统 def shutdown(): 操作系统(“关机-s”) #用户设置区!!! 小时=0 分钟=20 秒=0 #用户设置区!!! 总秒=小时*3600.0+分钟*60.0+秒-60.0 如果总秒=120: 温度秒=总秒-120 Timer(temp_sec,lambda:print(“关闭计算机前的最后3分钟!!\n”)).start() 其他: 打印(“关闭计算机前不到3分钟!!\n”) threading.Timer(总秒,关机).start()

Python定时器对支持的最长时间有限制吗? 导入线程 导入操作系统 def shutdown(): 操作系统(“关机-s”) #用户设置区!!! 小时=0 分钟=20 秒=0 #用户设置区!!! 总秒=小时*3600.0+分钟*60.0+秒-60.0 如果总秒=120: 温度秒=总秒-120 Timer(temp_sec,lambda:print(“关闭计算机前的最后3分钟!!\n”)).start() 其他: 打印(“关闭计算机前不到3分钟!!\n”) threading.Timer(总秒,关机).start(),python,timer,Python,Timer,代码如上所示。当我设置一个短时间,比如10分钟、20分钟或更长一点,脚本可以正常工作。但是,如果我将等待时间设置为4小时或5小时这样的长时间,脚本根本无法工作。时间到了什么也不会发生。你能指出错误发生的原因并指导我修复它吗?提前谢谢。你真的计时了吗?你说它工作正常,但当设置为10分钟时,它是否真的在10分钟内关闭了计算机,而不是说15分钟以上 我这样问是因为看起来你已经设置好了给你3分钟的警告。但是,由于在“threading.timer(total_sec,shutdown).start()”

代码如上所示。当我设置一个短时间,比如10分钟、20分钟或更长一点,脚本可以正常工作。但是,如果我将等待时间设置为4小时或5小时这样的长时间,脚本根本无法工作。时间到了什么也不会发生。你能指出错误发生的原因并指导我修复它吗?提前谢谢。

你真的计时了吗?你说它工作正常,但当设置为10分钟时,它是否真的在10分钟内关闭了计算机,而不是说15分钟以上

我这样问是因为看起来你已经设置好了给你3分钟的警告。但是,由于在“threading.timer(total_sec,shutdown).start()”中使用了total_sec,计时器会重置。因此,当您将其设置为60分钟时,它会在57分钟时发出警告,然后再运行60分钟


因此,我怀疑如果你让它运行11小时,当你将它设置为5小时时,它实际上会关闭计算机。

我可能错了,但你不需要在那里的某个地方设置一个循环吗?对不起,我不明白你提到的循环的含义。你能举个例子吗?没关系,似乎不需要它,尽管它确实显示了你可能离开的位置。我刚从11:49开始测试了5分钟,3分钟的警告显示在11:51,“关机”命令在11:53执行(提前一分钟导致Windows“关机”命令在关闭计算机之前显示系统警告需要1分钟)。因此,它看起来在短时间内正常工作……因此,在评论之前,我可能应该先看一下文档。我想你可能是对的,某处有个暂停。虽然不知道它在哪里,没关系。感谢您的回答:)Python的官方文档确实应该注意到关于计时器的可能超时问题(如果我们是对的…),但他们没有。。。
import threading
import os

def shutdown():
    os.system("shutdown -s")

# user setting zone!!!
hour = 0
minute = 20
sec = 0
# user setting zone!!!

total_sec = hour*3600.0 + minute*60.0 + sec - 60.0

if total_sec < 0:
    total_sec = 0
print("The computer will be Shut Down in (%d hour, %d minute, %d second).\n" %(hour, minute, sec))

if total_sec >= 120:
    temp_sec = total_sec - 120
    threading.Timer(temp_sec, lambda: print("Last 3 minutes before shuting down the computer!!\n")).start()
else:
    print("Less than 3 minutes before shuting down the computer!!\n")

threading.Timer(total_sec, shutdown).start()