搭建flask接口,提供模型打分服务

搭建打分接口,供服务端调用
1. 组织目录
.server
搭建flask接口,提供模型打分服务_第1张图片
2.配置文件
config.ini

[uwsgi]
chdir=/data/zz/server
home=/data/zz/zz_venv/bin/python
wsgi-file=flask_test.py
callable=app
master=true
processes=4
threads=1
socket=10.135.35.2:8788
vacuum=true
logfile-chmod=644
daemonize=%(chdir)/site.log
pidfile=%(chdir)/site.pid

3. 请求服务
flask_test.py

import flask
import logging
import json
import pandas as pd
import lightgbm as lgb

app = flask.Flask(__name__)
logging.getLogger().setLevel(logging.INFO)


class StatusCode:
    SUCCESS = 200
    MALFORMED_REQUEST = 479
    MODEL_ERROR = 480
    RESPOND_ERROR = 588


gbm = lgb.Booster(model_file='model.txt')


@app.route("/CvrModelApi/")
def hello():
    # return "Hello World!"
    return "

Hello World!

"
@app.route("/CvrModelApi/Predict/", methods=["POST"]) def predict(): try: request_data = flask.request.data.decode('utf-8') request_data_json = json.loads(request_data) # logging.info("url info %s", request_data_json) uid = request_data_json['uid'] df = pd.DataFrame(request_data_json['features']) except Exception as e: res = { "code": StatusCode.MALFORMED_REQUEST, "message": "{}".format(repr(e)) } logging.info(res) return flask.jsonify(res) res = {} try: scores = gbm.predict(df, num_iteration=gbm.best_iteration) online = pd.DataFrame() online['uid'] = df[0] online['uid_f'] = df[1] online['preds'] = scores res["uid"] = uid res["scores"] = online.values.tolist() res["code"] = StatusCode.SUCCESS if len(uid) == 0 or len(scores) == 0: res["code"] = StatusCode.ZERO_ERROR logging.info('zero respand') # logging.info(res) return flask.jsonify(res) except Exception as e: res = { "code": StatusCode.RESPOND_ERROR, "message": "{}".format(repr(e)) } logging.info(res) return flask.jsonify(res) if __name__ == "__main__": app.run(host='10.135.35.2', port=8787)

4. 接口测试
requests_test.py

import requests
import pandas as pd
import datetime
import time


# -----------测试hello接口--------------------
url = "http://10.135.35.2:8787/CvrModelApi/"
res = requests.get(url=url)
print(res.text)

# -----------测试predict接口--------------------
url = "http://10.135.35.2:8788/CvrModelApi/Predict/"
X_test = pd.read_csv('test_data', sep='\t', header=None).round(decimals=4).values.tolist()
data = {"uid": [111], "features": X_test}
starttime = datetime.datetime.now()
res = requests.post(url=url, json=data)
# time.sleep(10)
endtime = datetime.datetime.now()
print (endtime - starttime)
print(res.text)

你可能感兴趣的:(机器学习,机器学习)