包装了 eventlet.greenthread.main 函数,捕获所有绿色线程中的异常
This commit is contained in:
@@ -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 方法
|
||||
|
||||
Reference in New Issue
Block a user