import threading import queue import sys, os import common import bufferpool from blockqueue import block_queue from callback_data_struct import * from info_query import SceneInfo from string_utils import camel_to_snake, get_class, snake_to_camel from global_logger import logger # 需要全局的http tool? def run_scene_device(device_no:str, input_url: str, output_url:str, device_id: int, scene_info:SceneInfo, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url attr.output_path = output_url attr.device_id = device_id attr.alarm_interval = alarm_interval attr.video_frame = queue.Queue(10) attr.scene_info = scene_info if not attr.url: raise ValueError('input file miss!!!') if not attr.output_path: raise ValueError('unspecified output path!!!') handle_task_name = scene_info.handle_task if handle_task_name: try: handler_cls = get_class(f'scene_handler.{handle_task_name}', snake_to_camel(handle_task_name)) scene_instance = handler_cls(attr) infer_thread = threading.Thread(target=scene_instance.run, args=()) threads.append(infer_thread) infer_thread.start() out_thread = threading.Thread(target=scene_instance.push_video, args=()) threads.append(out_thread) out_thread.start() except Exception as e: # logger.exception(e) logger.exception(f'scene start failed: {e}') else: logger.warning(f'scene {scene_info.remark} for device {device_no} start failed beause no handle task')