在一个项目中,我们使用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接口,调用了几千个,也没有出现内存溢出。