一、使用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″来访问应用了

发表评论

邮箱地址不会被公开。 必填项已用*标注