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

搭建打分接口,供服务端调用
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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值