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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:43:21