Flask集成OpenAI Embedding接口调用内存持续上涨问题求解
解决Flask调用OpenAI Embedding接口内存持续上涨的问题
问题根源
每次请求接口时都创建新的OpenAI客户端实例,会重复初始化HTTP会话、连接池等资源,这些资源无法被及时回收,导致内存逐步累积。另外,请求返回的response对象在函数结束后可能未被及时垃圾回收,也会占用额外内存。
解决方案
- 复用OpenAI客户端实例:将
OpenAI()的实例化移到路由函数外部,全局仅创建一次,所有请求共用同一个客户端。客户端内部会维护连接池,避免重复初始化资源。 - 显式清理资源:在处理完API响应后,手动删除不再使用的变量,或调用Python垃圾回收模块触发回收(按需使用)。
- 使用生产级服务器运行Flask:Flask自带的开发服务器(
app.run())在多线程模式下内存管理不够高效,建议改用Gunicorn、UWSGI等生产级服务器,它们的资源回收机制更完善。 - 更新OpenAI SDK版本:旧版本的OpenAI Python SDK可能存在内存泄漏问题,升级到最新版本可以修复已知的内存管理bug。
修改后的代码示例
# -*- coding: utf-8 -*- from flask import Flask, request from openai import OpenAI import gc app = Flask(__name__) # 全局创建一次OpenAI客户端,所有请求复用 client = OpenAI() @app.route('/test', methods=['POST']) def test(): texts = request.json["texts"] no = request.json["no"] response = client.embeddings.create( input=texts, model="text-embedding-ada-002", encoding_format="float" ) print(response.usage) # 显式删除不再使用的变量,触发垃圾回收 del response, texts, no gc.collect() return "ok" if __name__ == '__main__': # 生产环境建议替换为Gunicorn等服务器,示例仅作演示 app.run(host="0.0.0.0", port=5000, debug=False, threaded=True)
生产环境启动示例(Gunicorn)
gunicorn -w 4 -b 0.0.0.0:5000 your_script_name:app
其中-w 4表示启动4个工作进程,可根据服务器配置调整。
内容的提问来源于stack exchange,提问作者Jclian
相关产品推荐
相关产品推荐

