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 睡眠功能无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

PyCharm 类型检查无法按预期工作

My-Sql 中的窗口化功能无法按预期工作

为啥 nodejs 中的睡眠不能按预期工作

Angular:为组件字段提供对服务功能的引用并从模板调用它无法按预期工作

睡眠功能不按顺序工作

addProximityAlert 无法按预期工作