diff --git a/code-server-like/app/__init__.py b/code-server-like/app/__init__.py index b5a866a..90eb9d0 100644 --- a/code-server-like/app/__init__.py +++ b/code-server-like/app/__init__.py @@ -38,7 +38,28 @@ try: error_counts[error_key] = 1 return False - # 4. 只修改关键的 greenio 方法,确保在致命错误时彻底关闭连接 + # 4. 增强错误处理,确保所有绿色线程错误都被捕获 + # 保存原始的 greenlet 主函数,包装它以捕获所有异常 + import eventlet.greenthread + original_main = eventlet.greenthread.main + + def custom_greenthread_main(*args, **kwargs): + """包装 greenlet 主函数,捕获所有异常,防止服务器宕机""" + try: + return original_main(*args, **kwargs) + except Exception as e: + # 捕获所有绿色线程中的异常 + if not is_duplicate_error(e): + print(f"[Eventlet GreenThread Error] {type(e).__name__}: {e}") + print("[Traceback]") + traceback.print_exc() + # 返回 None 继续运行,防止服务器宕机 + return None + + # 替换原始的 greenlet 主函数 + eventlet.greenthread.main = custom_greenthread_main + + # 5. 只修改关键的 greenio 方法,确保在致命错误时彻底关闭连接 from eventlet import greenio # 保存并替换原始的 greenio 方法