搭建打分接口,供服务端调用
1. 组织目录
.server

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 "<h1 style='color:blue'>Hello World!</h1>"
@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)
308

被折叠的 条评论
为什么被折叠?



