51 lines
2.0 KiB
Python
51 lines
2.0 KiB
Python
# -*- 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)
|