You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx后端Flask/Python应用运行约24小时后uWSGI段错误求助

Flask/uWSGI在M1 Mac上运行12-24小时后出现段错误的解决方案

问题核心

你的Flask应用通过uWSGI运行在M1 Mac裸机环境,接收请求后启动Python线程执行Docker部署,运行12-24小时后触发段错误。从崩溃栈来看,问题出在Python的_scproxy模块调用macOS系统代理配置时,大概率是ARM64架构下的兼容性bug或多线程竞态条件导致。

具体解决方案

1. 直接禁用代理自动检测

段错误的触发点是获取系统代理配置,绕过这个逻辑可以直接避免崩溃:

  • 代码层面:给requests强制清空代理配置
    import requests
    
    # 全局设置,所有requests请求都不使用代理
    session = requests.Session()
    session.proxies = {"http": None, "https": None}
    
  • 环境变量层面:在uWSGI配置中添加环境变量,强制禁用代理检测
    修改uwsgi.ini,新增以下配置:
    env = NO_PROXY=*
    env = REQUESTS_NO_PROXY=*
    env = HTTP_PROXY=
    env = HTTPS_PROXY=
    

2. 升级依赖版本

M1 Mac的ARM64架构对旧版本软件支持不完善,升级到最新稳定版:

  • 升级uWSGI到2.0.25及以上版本:
    pip install --upgrade uwsgi
    
  • 升级Python到3.11或更高版本,新版本对ARM64的系统API调用兼容性更好。

3. 替换Python线程为异步任务队列

uWSGI Worker进程与Python线程的组合容易引发资源冲突,改用专业异步框架:

  • 使用Celery搭配Redis或RabbitMQ,将Docker部署任务交给独立的Celery Worker执行,uWSGI只负责处理请求并返回响应,彻底避免在Worker进程内运行长时间线程。

4. 优化uWSGI配置,增强崩溃自愈能力

调整uWSGI配置,让Master进程自动处理崩溃的Worker:
修改uwsgi.ini,添加以下配置:

[uwsgi]
# 保留原有配置,新增以下内容
reload-on-exit = true  # Worker进程退出时自动重启
max-requests = 1000    # 每个Worker处理1000个请求后自动重启,避免积累异常状态
harakiri = 300         # 任务执行超过5分钟则强制杀死Worker(根据你的部署时长调整)

内容的提问来源于stack exchange,提问作者Justin Hammond

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 10:59:54