Python 睡眠功能无法按预期工作
Posted
技术标签:
【中文标题】Python 睡眠功能无法按预期工作【英文标题】:Python sleep function not working as expected 【发布时间】:2021-10-13 09:50:29 【问题描述】:我确定我遗漏了一些非常基本的东西...我有一个调用睡眠函数的 python 脚本。我希望主线程(在这种情况下)休眠 1 小时(3600 秒)。
以下是相关代码转载:
import time
from datetime import datetime
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
print("Current Time =", current_time)
print("Sleep", flush=True)
time.sleep(3600)
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
print("Current Time =", current_time)
print("Done sleeping", flush=True)
2小时后的输出是:
Current Time = 08:45:45
Sleep
但我的代码从不退出睡眠功能以打印完成时间或“完成睡眠”消息。
(我在 print 语句中添加了 flush 参数以消除潜在的缓冲,但我认为这与此处无关)。
关于为什么我的代码在 1 小时后没有退出睡眠功能有什么想法吗?
谢谢。
【问题讨论】:
是的,只要我做几秒钟就可以了。 我目前正在通过 Visual Code 测试代码, 好的,因为我试了 10 秒就没事了。 也许你的终端超时了? 一般情况下-您要避免长时间睡眠,您的软件条件可能会在睡眠期间发生变化,而较短的睡眠时间您可以检查这些是否发生了变化 【参考方案1】:您可以尝试这样的循环来告诉您需要多长时间才能超时。
import time
from time import perf_counter
from datetime import datetime
start = perf_counter()
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
print("Current Time =", current_time)
print("Sleep", flush=True)
# time.sleep(3600)
for i in range(3600):
print("Seconds sleeping:".format(i))
time_elapsed = perf_counter() - start
print("Elapsed Time =", time_elapsed)
time.sleep(1)
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
print("Current Time =", current_time)
print("Done sleeping", flush=True)
【讨论】:
这是一个很好的建议,但您有什么想法可以帮助调试核心问题吗? 我感觉问题可能与您计算机的节能设置有关。您可以查看失败所需的小步舞曲,然后更改设置并检查失败所需的时间是否与更新的设置相对应。我会先尝试锁定屏幕设置。 非常有趣,谢谢。我将禁用所有电池设置并重试。很快就会回来报告... 我禁用了所有睡眠/电池设置,因此我的计算机不会睡眠(它不会),但它仍然失败。最初我认为这是一个 VS Code 问题 - 它不是。我可以通过终端随意重新创建问题奇怪的是,它似乎只发生在 3600(或更多)的睡眠中......【参考方案2】:我添加了@Jortega 建议的 perf_counter。
我运行了 1 小时 (3600) 秒,在这种情况下它完成了,但也显示睡眠功能在 1 小时内“漂移”了大约 18 秒。输出如下:
Seconds sleeping:3597
Elapsed Time = 3615.837408959
Seconds sleeping:3598
Elapsed Time = 3616.842702875
Seconds sleeping:3599
Elapsed Time = 3617.847937667
Current Time = 15:20:32
Done sleeping
这很有趣,但不幸的是,我仍然不确定为什么以下代码不起作用:
import time
from datetime import datetime
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
print("Current Time =", current_time)
print("Sleep", flush=True)
time.sleep(3600)
now = datetime.now() <================== Code never executes.
current_time = now.strftime("%H:%M:%S")
print("Current Time =", current_time)
print("Done sleeping", flush=True)
如果有人有任何建议,将不胜感激。
【讨论】:
以上是关于Python 睡眠功能无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章