From 6ecd0c6735849abafee36a3faf09bd6379de464e Mon Sep 17 00:00:00 2001 From: CakeCN Date: Thu, 8 Jan 2026 00:10:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=85=E8=A3=85=E4=BA=86=20eventlet.greenthr?= =?UTF-8?q?ead.main=20=E5=87=BD=E6=95=B0=EF=BC=8C=E6=8D=95=E8=8E=B7?= =?UTF-8?q?=E6=89=80=E6=9C=89=E7=BB=BF=E8=89=B2=E7=BA=BF=E7=A8=8B=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code-server-like/app/__init__.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) 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 方法