flask下使用gunicorn和tornado部署Python应用
一、使用Gunicorn
Gunicorn使用非常简单,并且也非常好用。Gunicorn是一个Python的WSGI Web应用服务器,是从Ruby的Unicorn移植过来的。它基于”pre-fork worker”模型,即预先开启大量的进程,等待并处理收到的请求,每个单独的进程可以同时处理各自的请求,又避免进程启动及销毁的开销。不过Gunicorn是基于阻塞式IO,并发性能无法同Tornado比。另外,Gunicorn同uWSGI一样,一般都是配合着Nginx等Web服务器一同使用。
使用gunicorn前,需先安装flask,安装方法如下:
pip install flask
下面为一个简单的用flask写的web服务,run.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'hello world'
if __name__ == '__main__':
app.debug = True
app.run()
gunicorn的作用就是用命令行来启动服务器。安装如下:
pip install gunicorn
1.最简单的启动命令为:
gunicorn run:app
其中code就是指main.py.app就是那个wsgifunc的名字。
这样运行的话, gunicorn 默认作为一个监听 127.0.0.1:8000 的web server,可以在本机通过: http://127.0.0.1:8000 访问。
如果要通过网络访问,则需要绑定不同的地址(也可以同时设置监听端口),设置0.0.0.0可以监听到所有ip的请求:
gunicorn -b 0.0.0.0:8080 run:app
在多核服务器上,为了支持更多的并发访问并充分利用资源,可以使用更多的 gunicorn 进程:
gunicorn -w 4 run:app
两者结合到一起就是:
gunicorn -w 4 -b 0.0.0.0:8080 run:app
备注:
- -b 表示 gunicorn 开发的访问地址
- -w 表示开启多少个线程
2.用配置文件来启动Gunicorn服务。
新建配置文件con.py,文件位置同py代码位置。
import multiprocessing bind = "127.0.0.1:5000" workers = multiprocessing.cpu_count() * 2 + 1
其中,工作进程数量=处理器核数*2+1。
采用配置文件后台启动gunicorn服务,最后需要加&符号:
gunicorn -c conf.py --reload run:app &
之后你就可以通过”http://IP:5000″来访问应用了
3.若要停止gunicorn服务,则需要采用如下方法:
1)获取Gunicorn进程树:
通过执行如下命令,可以获取Gunicorn进程树:
pstree -ap|grep gunicorn
|-gunicorn,8978 /root/my_env/bin/gunicorn -c conf.py –reload run:app
| |-gunicorn,6710 /root/my_env/bin/gunicorn -c conf.py –reload run:app
| | `-{gunicorn},6711
| |-gunicorn,9845 /root/my_env/bin/gunicorn -c conf.py –reload run:app
| | `-{gunicorn},9846
| `-gunicorn,17616 /root/my_env/bin/gunicorn -c conf.py –reload run:app
| `-{gunicorn},17617
| | |-grep,32091 –color=auto gunicorn
2)退出Gunicorn
kill -9 8978
二、使用Tornado
Tornado的强大之处在于它是非阻塞式异步IO及Epoll模型,采用Tornado的可以支持数以万计的并发连接,对于高并发的应用有着很好的性能。使用Tornado来运行Flask应用很简单,只要编写下面的运行程序,并执行它即可。
1.首先安装Tornado
pip install tornado
2.新建tornado_server.py文件
from tornado.wsgi import WSGIContainer from tornado.httpserver import HTTPServer from tornado.ioloop import IOLoop from run import app #其中run.py中的app是flask的应用对象。 http_server = HTTPServer(WSGIContainer(app)) http_server.listen(5000) #flask默认的端口 IOLoop.instance().start()
之后你就可以通过”http://IP:5000″来访问应用了