Flask框架创建模型API接口并部署上线

更新时间: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()

 

 
  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
好的,下面是一个简单的使用 Flask 框架编写 API 接口的示例: ```python from flask import Flask, jsonify, request app = Flask(__name__) # 创建一个简单的数据列表 data = [ {"id": 1, "name": "John"}, {"id": 2, "name": "Jane"}, {"id": 3, "name": "Bob"} ] # 定义一个获取所有数据的 API 接口 @app.route('/api/data', methods=['GET']) def get_all_data(): return jsonify(data) # 定义一个获取单个数据的 API 接口 @app.route('/api/data/<int:id>', methods=['GET']) def get_data(id): for d in data: if d['id'] == id: return jsonify(d) return jsonify({'message': 'Data not found'}) # 定义一个创建数据的 API 接口 @app.route('/api/data', methods=['POST']) def create_data(): new_data = { 'id': request.json['id'], 'name': request.json['name'] } data.append(new_data) return jsonify(new_data) # 定义一个更新数据的 API 接口 @app.route('/api/data/<int:id>', methods=['PUT']) def update_data(id): for d in data: if d['id'] == id: d['name'] = request.json['name'] return jsonify(d) return jsonify({'message': 'Data not found'}) # 定义一个删除数据的 API 接口 @app.route('/api/data/<int:id>', methods=['DELETE']) def delete_data(id): for d in data: if d['id'] == id: data.remove(d) return jsonify({'message': 'Data deleted'}) return jsonify({'message': 'Data not found'}) if __name__ == '__main__': app.run(debug=True) ``` 这个示例中实现了一个简单的数据列表,包含了获取所有数据、获取单个数据、创建数据、更新数据和删除数据的 API 接口。其中,`@app.route` 装饰器用于定义 API 接口的 URL 和请求方法,`jsonify` 函数用于将 Python 对象转换为 JSON 格式的响应数据。在实际开发中,你需要根据具体业务需求和数据模型来定义相应的 API 接口

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值