# -*- coding: utf-8 -*- from threading import Thread import time from traceback import format_exc from loguru import logger from entity.FeedBack import recording_feedback from enums.RecordingStatusEnum import RecordingStatus from util.QueUtil import get_no_block_queue, put_queue, clear_queue class RecordingHeartbeat(Thread): __slots__ = ('_fb_queue', '_hb_queue', '_request_id') def __init__(self, fb_queue, hb_queue, request_id): super().__init__() self._fb_queue = fb_queue self._hb_queue = hb_queue self._request_id = request_id def run(self): request_id = self._request_id hb_queue, fb_queue = self._hb_queue, self._fb_queue logger.info("开始启动录屏心跳线程!requestId:{}", request_id) hb_init_num, progress = 0, '0.0000' status = RecordingStatus.RECORDING_WAITING.value[0] try: while True: time.sleep(3) hb_msg = get_no_block_queue(hb_queue) if hb_msg is not None and len(hb_msg) > 0: command_que = hb_msg.get("command") progress_que = hb_msg.get("progress") status_que = hb_msg.get("status") if progress_que is not None: progress = progress_que if status_que is not None: status = status_que if 'stop' == command_que: logger.info("开始终止心跳线程, requestId:{}", request_id) break if hb_init_num % 30 == 0: put_queue(fb_queue, recording_feedback(request_id, status, progress=progress), timeout=5, is_ex=True) hb_init_num += 3 except Exception: logger.error("心跳线程异常:{}, requestId:{}", format_exc(), request_id) finally: clear_queue(hb_queue) logger.info("心跳线程停止完成!requestId:{}", request_id)