在Python中按特定时间间隔执行任务

4
我正在尝试基于一组返回某些值的set_car_id在时间间隔内开关LED灯。如果设置返回某个值,则希望LED灯变亮8秒钟。在下面的代码中,一旦设置返回值,LED灯将开启8秒钟。但是,如果设置在5秒(8秒内)返回一个值,则LED灯直到下一个13秒才会打开,它将再开3秒钟,然后突然关闭。我只展示了代码的一小部分。有什么解决建议吗?
last_bright_time = None            
last_dim_time = None
new_action = -1
def LED_control(set_car_id):
    global last_bright_time
    global last_dim_time
    curr_time = time.time()
    should_remain_bright = False
    should_remain_dim = False
    if (new_action == 0):      #new_action ==0 corresponds to set_car_id returning some value
        if last_bright_time == None:
            last_bright_time = time.time()
        if  (curr_time - last_bright_time) < 8:
        should_remain_bright = True
    if  ((len(set_car_id) > 0) or should_remain_bright = True):
        car_light(1)                # function to bright the LED
        last_dim_time = None
    else:
         car_light(0)               # function to dim the LED
         last_bright_time = None

不清除 last_*_time 变量怎么样?这样你的状态机就可以记住一些东西了。 - M. Prokhorov
@M.Prokhorov 我需要清除 last_*_time 变量,因为在调用 car_light 函数后,我需要将它们清除,因为亮度从明到暗或从暗到明的状态发生了变化。 - Venkat kamal
好吧,如果你_必须_这样做,那么这就是你得到的行为。 - M. Prokhorov
1个回答

1

试试这个:

import time
while True:
    brighten()
    time.sleep(8)
    dim()
    time.sleep(8)

如果您想要更精确的内容:
import time
def sleep():
    time_start = time.time()
    while time.time() < time_start + 8000:
        pass
while True:
    brighten()
    sleep()
    dim()
    sleep()

在上面的代码片段中,您需要定义 brightendim 函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接