import threading from queue import SimpleQueue as Queue from time import sleep from model.Workflow import Workflow from workflow.video import quick_split_video from workflow.worker import do_workflow from . import LOGGER IS_LIVING = threading.Event() IS_ENCODING = threading.Event() IS_UPLOADING = threading.Event() ENCODING_QUEUE: "Queue[Workflow]" = Queue() class Bilibili(threading.Thread): def __init__(self) -> None: super().__init__() self.parts = [] def run(self) -> None: while True: if ENCODING_QUEUE.empty(): sleep(5) if len(self.parts) > 0 and not IS_UPLOADING.is_set(): self.do_upload() else: workflow_item = ENCODING_QUEUE.get() LOGGER.info("收到工作流请求:ID:【{}】".format(workflow_item.id)) for video_clip in workflow_item.video_clips: IS_ENCODING.set() try: LOGGER.info("工作流视频:ID:【{}】,路径:【{}】".format(video_clip.id, video_clip.full_path)) if len(video_clip.danmaku_clips) < 1: _parts = quick_split_video(video_clip.full_path) else: _parts = do_workflow(video_clip.full_path, video_clip.danmaku_clips[0].full_path) LOGGER.info("工作流视频压制完成:结果:【{}】".format(_parts)) for _part in _parts: self.parts.append(_part) except: LOGGER.error("压制异常!工作流视频:ID:【{}】,路径:【{}】".format(video_clip.id, video_clip.full_path)) finally: IS_ENCODING.clear() def do_upload(self): LOGGER.info("尝试投稿:内容【{}】".format(self.parts)) self.clear() def clear(self): self.parts = [] INSTANCE = Bilibili()