参考:Flask 应用如何部署
具体的流程在上述两个参考中已经有提到了,本人就提一些我自己的想法和看法好了。
首先是我想折腾的目的。就是为了使用 jieba 分词来开发一个分词 api,为此需要学习一下 python 如何部署服务器。
因此,在百度之后选择了Flask这个框架,可以说是非常好用了,借助装饰器可以非常方便的写出服务器后台。
下面看一个最简单的 flask 案例。
from flask import Flask, abort, request
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'hello world'
if __name__ == '__main__':
app.run(port=8080, host='0.0.0.0', debug=True)
运行之后,打开浏览器直接访问 8080 就能看见一个 hello world 了。
下面来看一个稍复杂的案例,如果理解了那么就能写出服务器后台了。
from flask import Flask, abort, request
app = Flask(__name__)
@app.route('/test/<params>', methods=['POST'])
def test_post(params):
print('form', request.form)
print("json", request.json)
print("args", request.args)
return {
'params': params,
'body': request.json,
'query': request.args
}, 200
@app.route('/test/<params>', methods=['GET'])
def test_get(params):
print('params', params)
print("args", request.args)
return {
'params': params,
'query': request.args
}, 200
if __name__ == '__main__':#这样写的目的是为了只在开发环境下debug
app.run(port=8080, host='0.0.0.0', debug=True)
一个一个来说吧。
首先是 app.route 这个装饰器。就是负责将路由挂载上去的。只要给一个函数添加这个装饰器,那就是一个路由了。而后面的参数 methods 则是指定了响应的方法,默认就是 GET。注意这里的方法名都要大写。
接下来是 request 对象。这个对象有着多个字段。重要的就是 request.form、request.json、request.args。在 get 方法中只有 request.args。args 中存放解析成字典对象的查询字符串,也就是 URL 中?后面的部分。
例如http://127.0.0.1:8080/test?msg=abc
就会解析成{'msg':'abc'}
。类似的,在 post 请求中,如果是表单格式的数据,会被解析到 form 中,如果是 json 格式,则会解析到 request.json 中。
在这里稍微注意一个细节,在 args 和 form 中所有的值都是字符串类型的,而 json 中则会按照 js 对象和 python 的数据类型互相转换。
接下来就是 gunicorn 使用了,直接pip install gunicorn
安装即可
然后 cd 到脚本目录,执行gunicorn -w 2 -b :8080 app:app
。注意 app:app,前一个 app 是你要运行的脚本的名称,自己修改下命令行即可。
具体参数就不解释了,看 gunicorn 文档即可,只要顺利运行起来就已经完成了。
现在,一个 python 服务器就已经完成了。对于流量很小的情况,这也可以直接使用了。
不过在生产环境中,出于多方面的考虑,还是会在外面套一层 nginx 的转发,也是便于负载均衡和自动容灾。
简单的案例如下。
server {
listen 80;
listen [::]:80;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
更多配置自己搜一下即可
- 本文链接: https://wp.cmyr.ltd/archives/based-on-flashgunicornginx-deployment-in-centos
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
欢迎关注我的其它发布渠道
发表回复
要发表评论,您必须先登录。