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
相关产品推荐
相关产品推荐

