更新时间:2020/07/31
模型训练后如何将模型打包上线,下面用Flask框架实现模型的部署和实时预测。
直接上干货,文件名称为flask_model.py
import numpy as np
from flask import Flask
from flask import request
from flask import jsonify
from sklearn.externals import joblib
#导入模型
model = joblib.load('model.pickle')
#temp = [5.1,3.5,1.4,0.2]
#temp = np.array(temp).reshape((1, -1))
#ouputdata = model.predict(temp)
##获取预测分类结果
#print('分类结果是:',ouputdata[0])
app = Flask(__name__)
@app.route('/',methods=['POST','GET'])
def output_data():
text=request.args.get('inputdata')
if text:
temp = [float(x) for x in text.split(',')]
temp = np.array(temp).reshape((1, -1))
ouputdata = model.predict(temp)
return jsonify(str(ouputdata[0]))
if __name__ == '__main__':
app.config['JSON_AS_ASCII'] = False
app.run(host='127.0.0.1',port=5000) # 127.0.0.1 #指的是本地ip
print('运行结束')
在cmd命令行中执行命令
>>> python flask_model
代码实时预测
# 调用API接口
import requests
base = 'http://127.0.0.1:5000/?inputdata=5.1,3.5,1.4,0.2'
response = requests.get(base)
answer = response.json()
print('预测结果',answer)
下面实现一个post请求demo
from flask import Flask, request, jsonify
import json
app = Flask(__name__)
app.debug = True
@app.route('/add/student/',methods=['post'])
def add_stu():
if not request.data: #检测是否有数据
return ('fail')
student = request.data.decode('utf-8')
#获取到POST过来的数据,因为我这里传过来的数据需要转换一下编码。根据晶具体情况而定
request_id = request.form['id']
student_json = json.loads(request_id )
#把区获取到的数据转为JSON格式。
return jsonify(student_json)
#返回JSON数据。
if __name__ == '__main__':
#127.0.0.1是本地的意思,如果要部署到服务器需要安装世界的ip地址进行修改
app.run(host='127.0.0.1',port=8888)
python调用post请求
import requests,json
data = {
'id':1,
'name':'lily',
'age':11,
'birthplace':'san',
'grade':123
}
url = 'http://127.0.0.1:8888/add/student/'
r = requests.post(url,data=json.dumps(data))
print(r.json())
高并发提供接口
# gevent
from gevent import monkey
from gevent.pywsgi import WSGIServer
# 下面这句不加也能启动服务,但是你会发现Flask还是单线程,在一个请求未返回时,其他请求也会阻塞,所以请添加这句
monkey.patch_all()
# gevent end
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
# 测试阻塞url1时,url2是否能够访问
time.sleep(1200)
return 'Hello World1'
@app.route('/hello')
def hello():
return 'Hello World2'
if __name__ == '__main__':
# app.run(port=5000,host="127.0.0.1")
http_server = WSGIServer(('127.0.0.1', int(5000)), app)
http_server.serve_forever()