You are here

Python内存溢出优化

g089h515r806 的头像
Submitted by g089h515r806 on 星期五, 2023-02-24 07:08

在一个项目中,我们使用python处理文本的智能分类,因为文本分类这样的工作,tensorflow, pytorch这些人工智能框架处理起来更为顺手,这些框架用python调用最为方便。我们的内容存放在Drupal里面,这就需要Drupal和python之间交互。

 

我简单使用了python下面的flask框架,封装了一个接口给Drupal调用,这样Drupal将文章的正文传递给python,python调用底层的框架,计算出来分类结果,返回给Drupal。

@app.route("/category/", methods=["GET","POST"]) # 4. 挂载路由(指定接口的url路径), 声明接口接受的方法
def category(): 
    # 3.1 从请求中获取参数
    # request.values  {"a": "1", "b": "2"}
    doc = request.values.get("p")
   
    category = request.values.get("category")
   
    candidates = category.split(",")
    ...
   
    allcts = {'categorys':categorys}       
    return jsonify(allcts)

 

 

我直接在命令行里面使用命令:python jiekou.py,运行程序

 

接口被Drupal调用200+多次,就会内存溢出,我不得不手动重启python。

 

由于这种启动方式,每次都会有一个提示信息:

Serving Flask app 'jiekou' (lazy loading)

 * Environment: production

   WARNING: This is a development server. Do not use it in a production deployment.

   Use a production WSGI server instead

 

表示这个只是测试方式。所以我决定使用一种更好的方式,运行python。

我经过搜索,发现tornado这个库不错,也比较简单的,

安装它:

pip install tornado

 

创建jiekou_server.py文件,代码如下:

from tornado.ioloop import IOLoop
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from jiekou import app
 
http_server=HTTPServer(WSGIContainer(app))
http_server.bind(5001,"0.0.0.0")          
http_server.start(1)                     
IOLoop.instance().start()

 

然后运行python jiekou_server.py

 

这个时候,使用Drupal调用python接口,调用了几千个,也没有出现内存溢出。


论坛: