下面的代码在一个帖子中。这些代码是从几年前在这里提出的问题的答案中复制的(不幸的是我现在无法找到问题)。虽然它看起来很健康,但我得到一个错误:" ValueError:睡眠长度必须是非负的"。这种情况仅在大约一个小时后才会发生。可能是因为它必须要对PC进行一些操作(我觉得不太可能,但它是一台运行Windows 10的笔记本电脑;-))。这是代码:
def upd_variables():
next_call = time.time()
while True:
measured_temp = 19.5 # te wijzigen in uitlezing van de sensor
acttemp.configure(text = str(measured_temp))
humi = '49.5' # te wijzigen in uitlezing van de sensor
humidity.configure(text = humi)
actdaytime = datetime.datetime.now()
today = actdaytime.strftime("%A %d %B %Y %H:%M:%S")
datumtijd.configure(text=today)
if (measured_temp < desired_temp):
#CV aan
status.configure(text="CV aan")
else:
#CV uit
status.configure(text="CV uit")
next_call = next_call+1;
time.sleep(next_call - time.time())
我希望这是可读的,我不确定代码块是否会像我想要的那样...... BTW:它是我正在研究的恒温器程序的一部分,打算在Raspberry Pi上运行。
答案 0 :(得分:1)
好吧,如果不是每个人都不清楚。
这里的问题是,当你的计算机在循环中间睡觉时,你的next_call = next_call+1
变老,然后你减去time.time(),这取决于计算机睡了多长时间更大或更大(除非你的电脑睡不到一秒钟)。
next_call = time.time() # Let's assume next_call=1
while True:
...
# computer sleeps for 5 seconds
next_call = next_call+1 # now next_call=2
time.sleep(next_call - time.time()) # At this time, time.time() returns 6 (1 start + 5 sleeps) -> 2 - 6 = -4
有几个选项可以使它表现,第一个更容易添加if
来检查睡眠时间是否为负。