如何让满足条件的Python代码每隔10秒打印时间,而非仅触发一次
代码修改方案
原代码仅能触发一次的核心原因是:判断差值用的是固定的初始start_time,首次满足条件后time.time() - start_time会永久大于10,且没有更新时间基准的逻辑,因此只会触发一次。
修改步骤
- 在你的循环逻辑外部,新增一个变量记录上一次触发的时间,初始值和
start_time保持一致 - 将触发条件中的时间差判断基准,从固定的
start_time改为动态更新的last_trigger_time - 每次触发打印操作后,更新
last_trigger_time为当前时间,为下一次10秒计数做基准 - 将原代码中
end_time的赋值逻辑移到循环外部,避免每次循环都重置导致break逻辑永远无法生效
修改后代码示例
import time from time import ctime import cv2 # 循环外部初始化变量(放到你原有循环的前面) start_time = time.time() last_trigger_time = start_time end_time = time.time() + 5 # 结束时间提前设置,不要放到循环内重复赋值 # 你原有的业务循环,保留原来的循环条件即可 while True: # 此处保留你原有获取frame、计算Total_ratio、定义font等逻辑 Total_ratio = xxx # 你的数值计算逻辑 frame = xxx # 你的帧获取逻辑 if (time.time() - last_trigger_time > 10 and Total_ratio > 5.0 ): cv2.putText(frame, "Closed", (50, 150), font, 7, (0, 255, 255), thickness=3) print(ctime()) # 触发后更新上一次触发时间,重置10秒计数 last_trigger_time = time.time() if time.time() > end_time: break
补充说明:如果你的需求是满足
Total_ratio>5.0时立刻触发第一次,之后每隔10秒触发,把last_trigger_time的初始值设为start_time - 10即可。
内容的提问来源于stack exchange,提问作者Toby Ran
相关产品推荐
相关产品推荐

