【发布时间】:2021-11-27 21:41:46
【问题描述】:
我遇到的问题是在后台运行并使用“window.after”样式递归循环每 0.5 秒更新一次的小型 python 应用程序。它正常工作,甚至在计算机进入睡眠模式并(不久)恢复时继续运行,但是当计算机在一夜之间睡眠时,循环停止在恢复时重复。该程序显然仍在主循环中运行,因为它是响应式的,所以我想弄清楚为什么该循环停止了。
下面是我所说的循环类型的一个简单示例:
import tkinter as tk
import datetime
def looped_function(window):
print(datetime.datetime.now())
window.after(1000, lambda: looped_function(window))
if __name__ == '__main__':
window = tk.Tk()
looped_function(window)
window.mainloop()
有没有人建议为什么这种情况只会发生在长期睡眠/恢复时?有没有一种简单的方法来检测计算机恢复,或者循环中断并自动修复它?
【问题讨论】:
-
FWIW,你不必在这里使用 lambda。你可以做
window.after(1000, looped_function, window) -
@Bryan:虽然是这样,但我认为在这里使用
lambda实际上更清晰,更简洁)。 -
Mandias:Windows 有不止一个级别的“睡眠”(即 S1–S3),其中一些(显然)您的 python 应用程序被挂起 - 请参阅System Power States。不知道是否以及如何解决这个问题......
标签: python windows loops tkinter sleep