You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python setInterval设置5秒定时打印失效 实际间隔1秒问题求解

问题原因

定时间隔不生效是两个逻辑错误导致的:

  • 你把detection函数定义、调用、Timer启动逻辑全写在了遍历检测框的for循环内部。视频检测的帧循环本身是高频运行的(常规每秒10~30帧),每遍历一个检测框就会新建一个独立的Timer线程,短时间内会启动几十上百个定时任务,根本不是单任务按固定间隔执行的逻辑。
  • 你在循环里同步调用detection()获取绘图用的label和color,这个调用是立刻执行的,不会等待5秒延时,再加上多线程重复触发,打印间隔自然远小于设定值。
修复方案

优先选择时间戳判断方案,没有多线程竞争问题,适配视频检测这类高频循环场景,稳定性远高于多线程Timer:

import time
import cv2

# 配置参数
PRINT_INTERVAL = 5  # 打印间隔,单位:秒
last_print_ts = 0  # 上次打印的时间戳,初始为0则首次检测到结果立刻打印,如需延后首次打印可设为time.time()

# 视频流读取主循环
# cap = cv2.VideoCapture(0)
while True:
    # 保留原有读帧、口罩检测逻辑
    # ret, frame = cap.read()
    # locs, preds = mask_detector.detect(frame)

    for (box, pred) in zip(locs, preds):
        (startX, startY, endX, endY) = box
        mask_conf, no_mask_conf = pred

        # 判定当前检测结果
        if mask_conf > no_mask_conf:
            label = "Mask"
            color = (0, 255, 0)
        else:
            label = "No Mask"
            color = (0, 0, 255)

        # 达到时间间隔才打印,避免高频输出
        current_ts = time.time()
        if current_ts - last_print_ts >= PRINT_INTERVAL:
            print(label)
            last_print_ts = current_ts

        # 绘图逻辑不受影响,每帧正常更新画面
        cv2.putText(frame, label, (startX, startY - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.45, color, 2)
        cv2.rectangle(frame, (startX, startY), (endX, endY), color, 2)

    # 保留原有画面显示、退出逻辑
    # cv2.imshow("Mask Detection", frame)
    # if cv2.waitKey(1) & 0xFF == ord('q'):
    #     break

如果一定要用Timer实现,注意Timer只能在帧循环外启动一次,不要在遍历检测框的循环里重复创建线程,单独维护全局变量存储最新检测结果即可:

import cv2
from threading import Timer

PRINT_INTERVAL = 5
latest_label = ""

def interval_print():
    global latest_label
    if latest_label:
        print(latest_label)
    Timer(PRINT_INTERVAL, interval_print).start()

# 全局只启动一次定时打印任务
interval_print()

# 后续帧检测主循环逻辑和前述一致,循环内仅更新latest_label的值,不要重复启动新Timer

提示:视频检测场景不推荐Timer方案,多线程访问共享变量如果不加锁容易出现值不一致问题;时间戳方案单线程运行,无额外开销,间隔精度完全满足业务需求。

内容的提问来源于stack exchange,提问作者Ilyas Adiyasa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 17:42:31