concurrent.futures.ProcessPoolExecutor, Error in atexit._run_exitfuncs

本文介绍了如何使用Python的concurrent.futures库并行检测一组大质数,同时处理`atexit`模块在进程池执行器关闭时可能出现的错误。
Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

import os
import concurrent.futures
import math
import atexit

PRIMES = [
    112272535095293,
    112582705942171,
    112272535095293,
    115280095190773,
    115797848077099,
    1099726899285419]

def is_prime(n):
  if n < 2:
    return False
  if n == 2:
    return True
  if n % 2 == 0:
    return False

  sqrt_n = int(math.floor(math.sqrt(n)))
  for i in range(3, sqrt_n + 1, 2):
    if n % i == 0:
      return False
  return True

def main():
  # atexit._clear() 或者  os._exit() 或者 executor = concurrent.futures.ProcessPoolExecutor() 
  with concurrent.futures.ProcessPoolExecutor() as executor:
    for number, prime in zip(PRIMES, executor.map(is_prime, PRIMES)):
      print('%d is prime: %s' % (number, prime))


if __name__ == '__main__':

  main()
  # atexit._clear()
  # os._exit()

Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "C:\Anaconda3\envs\bloom\lib\concurrent\futures\process.py", line 102, in _python_exit

三种解决方式:

  1. atexit._clear()
  2. os._exit()
  3. executor = concurrent.futures.ProcessPoolExecutor()

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

你有卡住了 我只看到“# ====================== 增强命令处理器 ====================== def chat_model_generate(model, message: str) -> str: """使用模型生成聊天回复""" try: # 准备模型输入 inputs = model.tokenizer( message, return_tensors="pt" ).to(model.device) # 生成回复 outputs = model.generate( **inputs, max_new_tokens=200, do_sample=True, temperature=0.7 ) # 解码回复 return model.tokenizer.decode(outputs[0], skip_special_tokens=True) except Exception as e: raise RuntimeError(f"生成回复失败: {str(e)}") def handle_chat_command(message: str) -> dict: """处理聊天命令""" global orchestrator, model_manager logger = logging.getLogger("Main.Command.Chat") # 检查模型是否可用 if orchestrator is None or orchestrator.default_model is None: return {"status": "error", "message": "聊天模型未初始化"} try: # 生成回复 response = chat_model_generate(orchestrator.default_model, message) logger.info(f"🤖 生成回复: {response}") return {"status": "success", "response": response} except Exception as e: logger.error(f"❌ 生成回复失败: {str(e)}", exc_info=True) return {"status": "error", "message": f"生成回复失败: {str(e)}"} def handle_vision_command(message: str) -> dict: """处理多模态命令""" global”就卡住了,前面我都覆盖好了“# E:\AI_System\main.py (完整增强版) import os import sys import time import logging import logging.handlers import signal import json import traceback import atexit import threading import queue import torch from pathlib import Path from tqdm import tqdm from concurrent.futures import ThreadPoolExecutor, as_completed from transformers import AutoConfig, AutoModelForCausalLM, VisionEncoderDecoderModel, AutoModelForVision2Seq from diffusers import StableDiffusionPipeline, DiffusionPipeline # 修复导入问题 - 确保根目录在路径中 sys.path.insert(0, str(Path(__file__).parent.resolve())) try: from core.config_system import CoreConfig from core.command_listener import start_command_listener from agent.model_manager import ModelManager from core.cognitive_orchestrator import CognitiveOrchestrator from agent.environment_interface import EnvironmentInterface from agent.diagnostic_system import DiagnosticSystem from utils.path_utils import normalize_path, clean_path_cache except ImportError as e: print(f"❌ 关键模块导入失败: {e}") traceback.print_exc() sys.exit(1) # ====================== 基础路径配置 ====================== # 确保所有操作都在E盘 BASE_DRIVE = "E:" PROJECT_ROOT = Path(__file__).parent.resolve() WORKSPACE_PATH = Path(BASE_DRIVE) / "AI_Workspace" # 创建必要目录 WORKSPACE_PATH.mkdir(parents=True, exist_ok=True) # 全局变量 orchestrator = None model_manager = None environment_interface = None diagnostic_system = None command_listener = None shutdown_initiated = False progress_bar = None log_listener = None # 日志监听器全局引用 start_time = None # 系统启动时间 # ====================== 线程安全的日志处理器 ====================== class ConcurrentFileHandler(logging.FileHandler): """线程安全的文件日志处理器""" def __init__(self, filename, mode='a', encoding=None, delay=False): super().__init__(filename, mode, encoding, delay) self.lock = threading.RLock() self.last_rotate = time.time() self.max_bytes = 10 * 1024 * 1024 # 10MB self.backup_count = 5 def emit(self, record): """线程安全地记录日志并处理滚动""" with self.lock: # 检查是否需要滚动日志 if self.should_rotate(): self.do_rotate() super().emit(record) def should_rotate(self): """检查是否需要滚动日志""" if self.stream is None: self.stream = self._open() # 检查文件大小 if os.path.exists(self.baseFilename): if os.stat(self.baseFilename).st_size > self.max_bytes: return True # 检查时间(每天滚动一次) if time.time() - self.last_rotate > 86400: # 24小时 return True return False def do_rotate(self): """执行日志滚动""" if self.stream: self.stream.close() self.stream = None # 重命名现有日志文件 base, ext = os.path.splitext(self.baseFilename) for i in range(self.backup_count - 1, 0, -1): sfn = f"{base}.{i}{ext}" dfn = f"{base}.{i+1}{ext}" if os.path.exists(sfn): if os.path.exists(dfn): os.remove(dfn) os.rename(sfn, dfn) dfn = f"{base}.1{ext}" if os.path.exists(dfn): os.remove(dfn) os.rename(self.baseFilename, dfn) self.last_rotate = time.time() self.stream = self._open() # ====================== 日志配置 ====================== def setup_logging() -> (logging.Logger, logging.handlers.QueueListener): """配置线程安全的日志系统""" logs_dir = WORKSPACE_PATH / "logs" logs_dir.mkdir(parents=True, exist_ok=True) # 配置日志级别 log_level_name = CoreConfig.get("log_level", "INFO").upper() log_level = getattr(logging, log_level_name, logging.INFO) # 创建唯一的日志文件名 log_file = logs_dir / f"system_{time.strftime('%Y%m%d_%H%M%S')}.log" # 配置根日志记录器 root_logger = logging.getLogger() root_logger.setLevel(log_level) # 移除所有现有处理器 for handler in root_logger.handlers[:]: root_logger.removeHandler(handler) handler.close() # 创建线程安全的文件处理器 file_handler = ConcurrentFileHandler(log_file, encoding='utf-8') file_handler.setLevel(log_level) # 控制台处理器 console_handler = logging.StreamHandler() console_handler.setLevel(log_level) # 日志格式 log_format = "%(asctime)s - [%(levelname)s] - %(name)s - %(message)s" formatter = logging.Formatter(log_format) file_handler.setFormatter(formatter) console_handler.setFormatter(formatter) # 创建队列处理器 log_queue = queue.Queue(-1) # 无限队列 queue_handler = logging.handlers.QueueHandler(log_queue) queue_handler.setLevel(log_level) # 创建队列监听器 queue_listener = logging.handlers.QueueListener( log_queue, file_handler, console_handler ) queue_listener.start() # 添加队列处理器 root_logger.addHandler(queue_handler) # 创建主日志记录器 main_logger = root_logger.getChild("Main") main_logger.info(f"⚙️ 日志系统初始化完成 (级别: {log_level_name})") main_logger.info(f"📝 日志文件位置: {log_file}") return main_logger, queue_listener # ====================== 模型路径处理 ====================== def get_model_paths(model_name: str) -> list: """返回所有可能的模型路径(仅限E盘)""" return [ WORKSPACE_PATH / "AI_Models" / model_name, Path(BASE_DRIVE) / "AI_Models" / model_name, Path(BASE_DRIVE) / "Models" / model_name, WORKSPACE_PATH / "models" / model_name ] def find_valid_model_path(model_name: str, logger: logging.Logger) -> Path: """在E盘查找有效的模型路径""" possible_paths = get_model_paths(model_name) for path in possible_paths: normalized_path = normalize_path(str(path)) if os.path.exists(normalized_path): logger.info(f"✅ 找到模型路径: {normalized_path}") return Path(normalized_path) # 没有找到有效路径 logger.critical(f"🛑 在E盘找不到模型: {model_name}") logger.critical("检查位置:") for path in possible_paths: logger.critical(f" - {path}") raise FileNotFoundError(f"在E盘找不到模型: {model_name}") # ====================== 模型注册函数 ====================== def register_models(model_manager, logger: logging.Logger) -> list: """异步注册所有模型并显示进度""" model_configs = { "TEXT_BASE": {"path": r"E:\AI_Models\Qwen2-7B", "type": "text", "priority": 1}, "TEXT_CHAT": {"path": r"E:\AI_Models\deepseek-7b-chat", "type": "text", "priority": 2}, "MULTIMODAL": {"path": r"E:\AI_Models\deepseek-vl2", "type": "multimodal", "priority": 3}, "IMAGE_MODEL": {"path": r"E:\AI_Models\sdxl", "type": "image", "priority": 4}, "YI_VL": {"path": r"E:\AI_Models\yi-vl", "type": "multimodal", "priority": 5} } # 按优先级排序模型 sorted_models = sorted(model_configs.items(), key=lambda x: x[1]["priority"]) registered_models = [] futures = {} # ✅ 关键修改1:添加路径存在性检查 with tqdm(total=len(model_configs), desc="🚀 注册模型") as pbar: with ThreadPoolExecutor(max_workers=3) as executor: for model_name, config in sorted_models: # 检查模型路径是否存在 if not Path(config["path"]).exists(): logger.warning(f"⚠️ 模型路径不存在: {model_name} -> {config['path']}") pbar.update(1) continue # 跳过不存在的路径 future = executor.submit( model_manager.register_model, model_name, config["path"], config["type"] ) futures[future] = model_name # ✅ 关键修改2:确保进度条正确更新 for future in as_completed(futures): model_name = futures[future] try: success = future.result() if success: registered_models.append(model_name) logger.info(f"✅ 注册成功: {model_name}") else: logger.error(f"❌ 注册失败: {model_name}") except Exception as e: logger.error(f"❌ 模型注册异常: {model_name} - {str(e)}", exc_info=True) finally: pbar.update(1) pbar.set_postfix_str(f"当前: {model_name}") return registered_models # ====================== 安全关闭处理 ====================== def shutdown_handler(signum=None, frame=None): """安全关闭系统(避免重复关闭)""" global shutdown_initiated, progress_bar, log_listener if shutdown_initiated: return shutdown_initiated = True logger = logging.getLogger("Main.Shutdown") if signum: signal_name = {signal.SIGINT: "Ctrl+C", signal.SIGTERM: "终止信号"}.get(signum, signum) logger.warning(f"⚠️ 接收到关闭信号: {signal_name}") else: logger.warning(f"⚠️ 接收到关闭请求") # 关闭顺序优化 shutdown_sequence = [ ("命令监听器", command_listener.stop if command_listener else None), ("协调器", orchestrator.shutdown if orchestrator else None), ("模型管理器", model_manager.shutdown if model_manager else None), ("环境接口", environment_interface.shutdown if environment_interface else None), ("诊断系统", diagnostic_system.shutdown if diagnostic_system else None) ] for name, shutdown_func in shutdown_sequence: if shutdown_func: try: logger.info(f"🛑 正在关闭{name}...") shutdown_func() logger.info(f"✅ {name}已关闭") except Exception as e: logger.error(f"❌ 关闭{name}失败: {str(e)}", exc_info=True) # 确保关闭进度条 if progress_bar: try: progress_bar.close() except: pass # 停止日志监听器 if log_listener: logger.info("🛑 正在停止日志监听器...") log_listener.stop() logger.info("✅ 日志监听器已停止") # 确保日志系统最后关闭 logging.shutdown() sys.exit(0) # ====================== 设置默认模型 ====================== def setup_default_model(): """ 设置默认模型 """ global model_manager, orchestrator logger = logging.getLogger("Main.DefaultModel") try: # 尝试加载 TEXT_BASE 作为默认模型 model_name = "TEXT_BASE" logger.info(f"⏳ 开始加载默认模型: {model_name}") # 同步加载模型 success, model = model_manager.load_model(model_name) if success and model is not None: # 使用协调器的 set_model 方法而不是 set_default_model if hasattr(orchestrator, 'set_model'): orchestrator.set_model(model_name, model) logger.info(f"✅ 默认模型已设置: {model_name}") else: # 如果协调器没有 set_model 方法,直接赋值 orchestrator.default_model = model logger.info(f"✅ 默认模型已设置 (直接赋值): {model_name}") return True else: raise RuntimeError("模型加载返回失败状态") except Exception as e: logger.error(f"❌ 默认模型设置异常: {str(e)}", exc_info=True) return False # ====================== 全局异常处理 ====================== def global_exception_handler(exc_type, exc_value, exc_traceback): """ 增强版全局异常处理器 关键改进: 1. 添加内存状态转储 2. 优化崩溃报告格式 3. 添加关键变量记录 4. 增强错误分析信息 """ if issubclass(exc_type, KeyboardInterrupt): sys.excepthook(exc_type, exc_value, exc_traceback) return # 获取日志记录器 logger = logging.getLogger("Main.Critical") # 记录原始异常 logger.critical("💥 未捕获的全局异常", exc_info=(exc_type, exc_value, exc_traceback)) try: # 创建崩溃报告 crash_report = { "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"), "system": { "python_version": sys.version, "platform": sys.platform, "executable": sys.executable }, "exception": { "type": str(exc_type), "message": str(exc_value), "traceback": traceback.format_tb(exc_traceback) }, "environment": { "workspace": str(WORKSPACE_PATH), "project_root": str(PROJECT_ROOT), "shutdown_initiated": shutdown_initiated }, "modules": { "orchestrator": "initialized" if orchestrator else "not initialized", "model_manager": "initialized" if model_manager else "not initialized", "diagnostic_system": "initialized" if diagnostic_system else "not initialized" } } # 添加内存分析(如果可用) try: import psutil process = psutil.Process() crash_report["memory"] = { "rss": process.memory_info().rss, "vms": process.memory_info().vms, "percent": process.memory_percent() } except ImportError: crash_report["memory"] = "psutil not available" # 保存崩溃报告 crash_dir = WORKSPACE_PATH / "crash_reports" crash_dir.mkdir(exist_ok=True) timestamp = time.strftime("%Y%m%d_%H%M%S") crash_file = crash_dir / f"crash_{timestamp}.json" with open(crash_file, "w", encoding="utf-8") as f: json.dump(crash_report, f, indent=2, ensure_ascii=False) logger.error(f"📝 崩溃报告已保存: {crash_file}") # 额外保存完整堆栈跟踪 stack_file = crash_dir / f"stacktrace_{timestamp}.log" with open(stack_file, "w", encoding="utf-8") as f: traceback.print_exception(exc_type, exc_value, exc_traceback, file=f) logger.error(f"📝 堆栈跟踪已保存: {stack_file}") except Exception as e: logger.error(f"❌ 保存崩溃报告失败: {str(e)}") # 回退到简单记录 traceback.print_exception(exc_type, exc_value, exc_traceback) # 尝试安全关闭 logger.critical("🛑 尝试安全关闭系统...") try: shutdown_handler() except Exception as e: logger.error(f"❌ 安全关闭失败: {str(e)}") sys.exit(1) # ====================== 命令处理器 ====================== def command_handler(command: str): """处理用户命令""" global orchestrator, model_manager, environment_interface, diagnostic_system logger = logging.getLogger("Main.Command") logger.info(f"📝 收到命令: {command}") # 转换为小写以便处理 cmd = command.strip().lower() if cmd == "help": return { "status": "success", "commands": { "help": "显示此帮助信息", "status": "显示系统状态", "models": "列出所有可用模型", "load [model]": "加载指定模型", "unload [model]": "卸载指定模型", "shutdown": "安全关闭系统" } } elif cmd == "status": # 获取系统状态 status = { "system": { "uptime": time.time() - start_time if 'start_time' in globals() else 0, "shutdown_initiated": shutdown_initiated } } # 添加模型管理器状态 if model_manager: status["model_manager"] = model_manager.get_status() # 添加协调器状态 if orchestrator: status["orchestrator"] = orchestrator.get_status() return status elif cmd == "models": # 列出所有已注册模型 if model_manager: return { "registered_models": model_manager.registered_models, "loaded_models": list(model_manager.loaded_models.keys()) } return {"error": "模型管理器未初始化"} elif cmd.startswith("load "): # 加载指定模型 model_name = cmd[5:].upper() if model_manager: try: # 异步加载模型 future = model_manager.load_model(model_name) return {"status": "loading", "model": model_name, "message": "模型正在异步加载"} except Exception as e: return {"error": f"加载模型失败: {str(e)}"} return {"error": "模型管理器未初始化"} elif cmd.startswith("unload "): # 卸载指定模型 model_name = cmd[7:].upper() if model_manager: try: model_manager.unload_model(model_name) return {"status": "success", "model": model_name, "message": "模型已卸载"} except Exception as e: return {"error": "卸载模型失败: {str(e)}"} return {"error": "模型管理器未初始化"} elif cmd == "shutdown": # 安全关闭系统 return {"action": "shutdown", "message": "系统将在5秒内关闭"} else: return {"error": "未知命令", "available_commands": ["help", "status", "models", "load", "unload", "shutdown"]} # ====================== 主函数 ====================== def main(): """主函数(完全E盘操作)""" global orchestrator, model_manager, environment_interface, diagnostic_system global command_listener, progress_bar, log_listener, start_time # 记录启动时间 start_time = time.time() # 设置全局异常处理器 sys.excepthook = global_exception_handler # 清理路径缓存 clean_path_cache() # 初始化配置系统 CoreConfig.initialize() # 设置日志 - 修复返回值问题 logger, log_listener = setup_logging() # 注册退出处理 atexit.register(shutdown_handler) # 设置信号处理 signal.signal(signal.SIGINT, shutdown_handler) signal.signal(signal.SIGTERM, shutdown_handler) # 记录启动信息 logger.info("=" * 70) logger.info(f"🌟 {'AI系统 - 弹性星型架构':^60} 🌟") logger.info("=" * 70) logger.info(f"🚀 工作空间: {WORKSPACE_PATH}") logger.info(f"📂 项目目录: {PROJECT_ROOT}") logger.info(f"🐍 Python版本: {sys.version}") logger.info(f"🖥️ 操作系统: {sys.platform}") logger.info("-" * 70) # 创建启动进度条 progress_bar = tqdm( total=100, desc="🚀 系统启动中", bar_format="{l_bar}{bar}| {n_fmt}/{total_fmt} [{elapsed}<{remaining}]", dynamic_ncols=True ) try: # 初始化模型管理器 model_manager_config = CoreConfig.get("model_manager", {}) cache_dir = WORKSPACE_PATH / "model_cache" cache_dir.mkdir(parents=True, exist_ok=True) model_manager = ModelManager( config=model_manager_config, cache_dir=str(cache_dir), use_gpu=model_manager_config.get("use_gpu", True), max_models_in_memory=model_manager_config.get("max_models_in_memory", 3) ) logger.info("✅ 模型管理器初始化完成") progress_bar.update(10) # 更新进度条 # 注册所有模型 progress_bar.set_description("📦 注册模型中") progress_bar.refresh() registered_models = register_models(model_manager, logger) # 验证已注册模型 logger.info("🔍 验证已注册模型...") valid_models = model_manager.validate_registered_models(logger) logger.info(f"✅ 有效模型: {len(valid_models)}/{len(registered_models)}") # 检查是否有有效模型 if not valid_models: logger.critical("🛑 没有有效模型,系统无法启动") shutdown_handler() return logger.info(f"✅ 已注册模型: {registered_models}") progress_bar.update(30) # 更新进度条 progress_bar.set_description("🚀 系统启动中") # 重置描述 # 初始化星型协调器 progress_bar.set_description("🧠 初始化协调器") progress_bar.refresh() cognitive_config = CoreConfig.get("cognitive_config", {}) state_dir = WORKSPACE_PATH / "system_state" state_dir.mkdir(parents=True, exist_ok=True) cognitive_config["state_dir"] = str(state_dir) orchestrator = CognitiveOrchestrator(config=cognitive_config) logger.info("✅ 星型协调器初始化完成") progress_bar.update(15) # 更新进度条 progress_bar.set_description("🚀 系统启动中") # 重置描述 # 设置默认模型 setup_default_model() # 初始化卫星模块 progress_bar.set_description("🛰️ 初始化卫星模块") progress_bar.refresh() ei_config = CoreConfig.get("environment_interface", {}) ds_config = CoreConfig.get("diagnostic_system", {}) environment_interface = EnvironmentInterface( name="环境接口", coordinator=orchestrator, config=ei_config ) diagnostic_system = DiagnosticSystem( name="诊断系统", coordinator=orchestrator, config=ds_config ) # 动态注册模块 register_method = None if hasattr(orchestrator, 'register_module'): register_method = orchestrator.register_module elif hasattr(orchestrator, 'add_module'): register_method = orchestrator.add_module else: logger.warning("⚠️ 协调器没有标准注册方法,使用直接赋值") orchestrator.modules = {} # 注册模块 module_mapping = { "environment": environment_interface, "diagnostic": diagnostic_system } for name, module in module_mapping.items(): if register_method: register_method(name, module) else: orchestrator.modules[name] = module logger.info("✅ 卫星模块初始化完成") progress_bar.update(15) # 更新进度条 progress_bar.set_description("🚀 系统启动中") # 重置描述 except Exception as e: logger.error(f"❌ 系统初始化失败: {e}", exc_info=True) if progress_bar: progress_bar.close() sys.exit(1) # 连接模块 try: progress_bar.set_description("🔗 连接模块中") progress_bar.refresh() if hasattr(orchestrator, 'connect_modules'): if orchestrator.connect_modules(): logger.info("✅ 星型架构模块连接成功") else: logger.warning("⚠️ 模块连接存在问题,系统进入降级模式") else: logger.info("ℹ️ 协调器没有 connect_modules 方法,跳过模块连接") progress_bar.update(10) # 更新进度条 progress_bar.set_description("🚀 系统启动中") # 重置描述 except Exception as e: logger.error(f"❌ 模块连接失败: {e}", exc_info=True) if progress_bar: progress_bar.close() sys.exit(1) # 加载基础模型 base_model_key = "TEXT_BASE" base_model_info = CoreConfig.get("model_settings.TEXT_BASE", {}) model_name = base_model_info.get("name", "Qwen2-7B") try: progress_bar.set_description(f"🤖 加载 {model_name}") progress_bar.refresh() # 同步加载基础模型 success, model = model_manager.load_model(base_model_key) if success: logger.info(f"✅ 基础模型加载成功: {base_model_key}") # 使用协调器的 set_model 方法而不是 set_default_model if hasattr(orchestrator, 'set_model'): orchestrator.set_model(base_model_key, model) else: # 如果协调器没有 set_model 方法,直接赋值 orchestrator.default_model = model else: raise RuntimeError(f"模型加载返回失败状态: {base_model_key}") progress_bar.update(10) progress_bar.set_description("🚀 系统启动中") except Exception as e: logger.error(f"❌ 基础模型加载失败: {e}", exc_info=True) # 检查是否有其他可用模型 fallback_model = None for model_name in registered_models: if model_name != base_model_key: try: success, model = model_manager.load_model(model_name) if success: fallback_model = model_name logger.warning(f"⚠️ 使用备用模型: {fallback_model}") # 使用协调器的 set_model 方法而不是 set_default_model if hasattr(orchestrator, 'set_model'): orchestrator.set_model(fallback_model, model) else: # 如果协调器没有 set_model 方法,直接赋值 orchestrator.default_model = model break except: continue if not fallback_model: logger.critical("🛑 没有可用模型,系统无法启动") shutdown_handler() return # 启动命令监听器 try: progress_bar.set_description("📡 启动命令监听") progress_bar.refresh() command_listener = start_command_listener( command_handler=command_handler, shutdown_handler=shutdown_handler ) logger.info("✅ 命令监听器已启动") progress_bar.update(10) # 更新进度条 except Exception as e: logger.error(f"❌ 命令监听器启动失败: {e}", exc_info=True) if progress_bar: progress_bar.close() shutdown_handler() return # 完成启动进度 progress_bar.set_description("🎉 系统准备就绪") progress_bar.update(10) # 最后10% time.sleep(0.5) # 让用户看到完成状态 progress_bar.close() logger.info("🌟 系统准备就绪! 输入命令开始交互 ('help' 查看命令列表)") logger.info("-" * 70) # 主循环 try: while True: time.sleep(0.1) # 降低CPU占用 # 检查命令队列 if command_listener and hasattr(command_listener, 'command_queue'): while not command_listener.command_queue.empty(): command = command_listener.command_queue.get() response = command_handler(command) # 处理关闭指令 if isinstance(response, dict) and response.get("action") == "shutdown": shutdown_handler() return # 打印响应 if response: print("\n" + ("-" * 50)) if isinstance(response, dict): response_str = json.dumps(response, indent=2, ensure_ascii=False) print(f"系统响应:\n{response_str}") else: print(f"系统响应: {str(response)}") print("-" * 50 + "\n") except Exception as e: logger.critical(f"🔥 主循环错误: {e}", exc_info=True) shutdown_handler() if __name__ == "__main__": try: main() except Exception as e: print(f"🔥 主函数异常: {e}") traceback.print_exc() sys.exit(1)”,你从“# ====================== 增强命令处理器 ======================”开始写吧
09-01
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值