You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
2.0KB

  1. # -*- coding: utf-8 -*-
  2. from threading import Thread
  3. import time
  4. from traceback import format_exc
  5. from loguru import logger
  6. from entity.FeedBack import recording_feedback
  7. from enums.RecordingStatusEnum import RecordingStatus
  8. from util.QueUtil import get_no_block_queue, put_queue, clear_queue
  9. class RecordingHeartbeat(Thread):
  10. __slots__ = ('_fb_queue', '_hb_queue', '_request_id')
  11. def __init__(self, fb_queue, hb_queue, request_id):
  12. super().__init__()
  13. self._fb_queue = fb_queue
  14. self._hb_queue = hb_queue
  15. self._request_id = request_id
  16. def run(self):
  17. request_id = self._request_id
  18. hb_queue, fb_queue = self._hb_queue, self._fb_queue
  19. logger.info("开始启动录屏心跳线程!requestId:{}", request_id)
  20. hb_init_num, progress = 0, '0.0000'
  21. status = RecordingStatus.RECORDING_WAITING.value[0]
  22. try:
  23. while True:
  24. time.sleep(3)
  25. hb_msg = get_no_block_queue(hb_queue)
  26. if hb_msg is not None and len(hb_msg) > 0:
  27. command_que = hb_msg.get("command")
  28. progress_que = hb_msg.get("progress")
  29. status_que = hb_msg.get("status")
  30. if progress_que is not None:
  31. progress = progress_que
  32. if status_que is not None:
  33. status = status_que
  34. if 'stop' == command_que:
  35. logger.info("开始终止心跳线程, requestId:{}", request_id)
  36. break
  37. if hb_init_num % 30 == 0:
  38. put_queue(fb_queue, recording_feedback(request_id, status, progress=progress), timeout=5, is_ex=True)
  39. hb_init_num += 3
  40. except Exception:
  41. logger.error("心跳线程异常:{}, requestId:{}", format_exc(), request_id)
  42. finally:
  43. clear_queue(hb_queue)
  44. logger.info("心跳线程停止完成!requestId:{}", request_id)