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

Azure部署Flask+Gunicorn时触发RecursionError递归深度超限

Azure部署Flask+Gunicorn触发SSL递归错误问题

错误现象

在Azure平台使用Gunicorn部署Flask应用时,仅线上环境触发RecursionError: maximum recursion depth exceeded错误,本地运行相同代码完全正常。移除Azure中的启动命令后,HTTP请求可成功执行,但WebSocket相关代码无法正常工作。

错误日志

/opt/python/3.10.14/lib/python3.10/ssl.py", line 604, in minimum_version
    super(SSLContext, SSLContext).minimum_version.__set__(self, value)
  [Previous line repeated 476 more times]
RecursionError: maximum recursion depth exceeded

相关代码片段

http = urllib3.PoolManager()
encoded_payload = urllib.parse.urlencode(payload).encode('utf-8')
response = http.request('POST', url, body=encoded_payload, headers=headers)   
response_data = json.loads(response.data.decode('utf-8'))           

部署配置

Azure启动命令

gunicorn --bind=0.0.0.0:8000 --timeout 600 --worker-class gevent --preload app:app

startup.txt文件内容

gunicorn --bind=0.0.0.0:8000 --timeout 600 --worker-class gevent app:app

最小复现步骤(更新)

最初调用私有URL时遇到该问题,后续通过公开API也复现了相同错误:

1. 搭建Flask应用

创建基础Flask应用,包含一个使用urllib3发起HTTP POST请求的端点:

from flask import Flask, jsonify
import urllib3
import urllib.parse
import json
import traceback

app = Flask(__name__)

@app.route('/')
def index():
    url = "https://jsonplaceholder.typicode.com/posts"  # 用于测试的公开API
    payload = {
        "title": "foo",
        "body": "bar",
        "userId": 1
    }
    headers = {
        "accept": "application/json",
        "Content-type": "application/json"  # 该API要求的JSON内容类型
    }
    try:
        http = urllib3.PoolManager()
        encoded_payload = json.dumps(payload).encode('utf-8')  # 为公开API生成JSON格式的请求体
        response = http.request(
            'POST',
            url,
            body=encoded_payload,
            headers=headers
        )
        
        response_data = json.loads(response.data.decode('utf-8'))

        return jsonify(response_data)
    except Exception as e:
        traceback.print_exc()
        return jsonify({"error": str(e), "trace": traceback.format_exc()}), 500

if __name__ == '__main__':
    app.run(debug=True)

2. 部署到Azure

使用以下启动命令部署至Azure:

gunicorn --bind=0.0.0.0:8000 --timeout 600 --worker-class gevent --preload app:app

同时保留startup.txt文件内容:

gunicorn --bind=0.0.0.0:8000 --timeout 600 --worker-class gevent app:app

3. 问题复现

部署完成后访问根端点(/),会触发RecursionError: maximum recursion depth exceeded错误。

预期与实际行为

  • 预期行为:应用处理请求并返回公开API的预期JSON响应。
  • 实际行为:应用抛出RecursionError,错误堆栈指向SSL上下文处理,但根本原因尚不明确。

说明

该错误在调用公开API和私有URL时均会出现,推测问题与Azure部署环境或Gunicorn的特定配置(如--preload参数、gevent worker类)相关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 09:34:58