小白第一次搞线上部署,很多东西都不懂,再次感谢邸同学的提点,学到了一些东西,现在将其记录下来,避免以后重复遇到。
以波士顿房价预测为例,项目名为house_predict
1.使用flask框架开发服务,文件名为:house_serve.py
from flask import Flask
from house_price_predict import house_predict #这个函数包含了所有字段处理和模型调用的代码,#只要传入参数字典就能返回预测结果
app_house = Flask(__name__)
@app.route('/', methods=['get'])
def index():
return 'Hello Index Page!'
@app.route('/api/house_price', methods=['GET','POST'])
def index_1():
result = {"msg": "", "error": 0, "data": {}}
if request.method == 'GET':
return 'Hello Index Page!'
else:
js = request.get_json(force=True) #获取post传入的参数,参数格式
#{"room_nums":"3"}
price = house_predict(js)
if price:
result = {"msg": "", "error": 0, "data": {price}}
else:
result = {"msg": "", "error": 1, "data": {'error info'}}
return result
app_house.run(host='0.0.0.0', port=12345)
2.使用gunicorn设置并发
2.1安装gunicorn【其他方法可自行百度】:
pip install gunicorn
2.2安装完了就可以设置并发,有两种场景
场景一:直接在服务器上跑并发服务
gunicorn -w 3 -b 127.0.0.1:8080 house_serve:app_house
-w:设置并发时子进程数量
-b:设置IP地址和端口号
house_serve是flask框架所在的文件名,app_house是flask启动的app名字
如果想查看进程,使用ps -ef|grep gunicorn
关闭进程使用 kill -9 +主进程号
场景二:使用进程守护设置并发
1)安装supervisor:pip install supervisor
由于使用pip安装,supervisor保存在了 /usr/local/python/bin,为了方便使用,把它扣出来
回到/usr,创建supervisor文件夹,然后:
echo_supervisord_conf > /usr/supervisor/supervisord.ini
2)在服务器上/usr/supervisor/创建文件夹/usr/supervisor/supervisord.d/,在此文件夹中为进程创建配置文件house.conf【使用preload可以输出错误信息】
#项目目录
directory=/home/project/house_predict
command=/home/local/python3/bin/gunicorn -w 3 -b 127.0.0.1:8080
house_serve:app_house --preload
autostart=true
autorestart=true
stderr_logfile=/home/project/house_predict/logs/house.err.log
stdout_logfile=/home/project/house_predict/logs/house.out.log
3)回到/usr/supervisor/,用vim打开supervisor.ini
[include]
files = /usr/supervisor/supercisord.d/*.conf
4)启动supervisor
supervisord -c /usr/supervisor/supervisord.ini
5)后台查看进程
ps -ef|grep supervisor
6)关闭进程
kill -9 进程号