如何在无限循环内的elif条件满足时制作一个计时器,尽可能轻便

How to make a timer when elif condition inside infinite loop is satisfied, which is as light as possible

我有与plc通信的视频处理代码。在无限循环中,我需要 timer/counter 来执行命令。代码如下所示:

while True: 
    if(condition1): 
        #do something

    elif(condition2): 
        #do another thing

    elif(condition3): 
        #do another thing

    elif(condition_10s_passed): 
        print("You have waited too long")

在这里我无法从 time 实现 time.sleep() 或从 tkinter 实现 root.after() 因为它们停止了我没有 want.I 检查 threading.timer() 但不能的 while 循环也实现了它。

我使用 mediapipe 的姿势检测算法,并在屏幕上显示视频。我也找到了解决方案,但它导致视频帧率下降,所以我要求更好的解决方案。

我的解决方案是这样的:我在除 elif 之外的所有地方定义了 old_time,在其中我检查了时间过去的条件。然后我将当前时间与 old_time 之间的差异来测量经过的时间。

while True:
    old_time=time.time() 

    if(condition1): 
        old_time=time.time()
        #do something 

    elif(condition2): 
        old_time=time.time()
        #do another thing

    elif(condition3): 
        old_time=time.time()
        #do another thing

    elif (time.time()-oldtime)>10: 
        print("You have waited too long")

fps 下降的原因可能是其他原因,但它是在我实施此解决方案后开始的。我不是优化代码方面的专家,我需要知道 fps 问题是否是由于太多 old_time 定义造成的。

注意:这是我的第一个问题,我愿意接受有关我的问题(其标题、内容、定义等)的评论

我找到了解决办法。我使用 time.sleep() 但在另一个线程中不中断 while 循环。

#5 seconds timer
def timer():
   global limit_time
   limit_time = False
   time.sleep(5)
   limit_time = True

#Starting the timer in another thread when condition is satisfied
if("condition to start timer"):
   thread1 = Thread(target=timer)
   thread1.start()

这里当条件满足时调用函数 timer 等待 5 秒然后将变量 limit_time 更改为 True。然后在代码中我通过检查变量 limit_time.

知道 5 秒过去了