" ValueError:睡眠长度必须是非负的"在一个线程中

时间:2016-01-25 22:31:40

标签: python multithreading

下面的代码在一个帖子中。这些代码是从几年前在这里提出的问题的答案中复制的(不幸的是我现在无法找到问题)。虽然它看起来很健康,但我得到一个错误:" 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上运行。

1 个答案:

答案 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来检查睡眠时间是否为负。