线程中的“ValueError:sleep length must be non negative”(值错误:休眠长度必须为非负)

2024-10-03 21:27:11 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码在一个线程中。这个代码是从几年前这里提出的一个问题的答案中复制的(不幸的是,我现在找不到这个问题)。虽然听起来不错,但我得到了一个错误:“ValueError:sleep length must be non-negative”。大约一个小时后才会发生这种情况。可能是因为它必须在电脑进入睡眠状态时做些什么(我认为不太可能,但它是一台运行Windows10的笔记本;-)。代码如下:

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())

我希望这是可读的,我不确定代码块会看起来像我希望它。。。 顺便说一句:这是我正在研究的恒温器程序的一部分,打算在树莓皮上运行。在


Tags: 代码textintimeconfiguresleepcallvan
1条回答
网友
1楼 · 发布于 2024-10-03 21:27:11

如果大家都不清楚的话。在

这里的问题是,当您的计算机在循环的中间休眠时,next_call = next_call+1会变旧,然后您会进行减法时间。时间()这取决于计算机睡眠的时间,它可能会大一点或大得多(除非你的计算机睡眠时间少于一秒钟)。在

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,检查睡眠时间是否为负。在

相关问题 更多 >