【Flask】Flask+gevent+gunicorn+nginx

本文详细介绍使用Flask框架结合Gunicorn及Nginx实现高性能Web应用的过程。从安装配置到反向代理设置,再到压力测试验证,全面覆盖部署Flask应用所需步骤。

1.安装flask
pip install flask
2.安装gevent
pip install gevent
3.安装gunicorn
pip install gunicorn
版本号信息如下:
[root@rs-2 ~]# pip list
Flask (0.10.1)
gevent (1.0.1)
greenlet (0.4.2)
gunicorn (18.0)
pip (1.5.5)
setuptools (3.6)


4.安装nginx
下载源码包安装,版本信息如下
[root@rs-2 sbin]# ./nginx -v
nginx version: nginx/1.7.0


5.nginx配置反向代理

         listen       80;
         server_name  localhost;
         #charset koi8-r;
         #access_log  logs/host.access.log  main;
          location / { 
              try_files @uri @pp; 
          } 
          location @pp { 
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
              proxy_set_header Host $http_host; 
              proxy_pass http://127.0.0.1:5000; 
          } 


所有请求转发到gunicorn监听的5000上。
6.gunicorn配置
[root@rs-2 pythonTest]# cat gun.conf 
import os
bind='127.0.0.1:5000'
workers=4
backlog=2048
worker_class="gevent" #sync, gevent,meinheld
debug=True
proc_name='gunicorn.pid'
pidfile='/var/log/gunicorn/debug.log'
loglevel='debug'
[root@rs-2 pythonTest]# 


7.测试脚本编写


[root@rs-2 pythonTest]# cat run_test.py 

from flask import Flask
from flask import render_template_string
import os

from werkzeug.contrib.fixers import ProxyFix

app = Flask(__name__)

@app.route("/")

def index(): 
  return "Hello World"

app.wsgi_app = ProxyFix(app.wsgi_app)

if __name__ == "__main__":        
    app.run()

8.启动脚本
[root@rs-2 pythonTest]# gunicorn -c gun.conf  run_test:app
  
看到如下部分输入 2014-05-12 10:29:41 [30260] [INFO] Listening at: http://127.0.0.1:5000 (30260)
2014-05-12 10:29:41 [30260] [INFO] Using worker: gevent
2014-05-12 10:29:41 [30265] [INFO] Booting worker with pid: 30265
2014-05-12 10:29:41 [30266] [INFO] Booting worker with pid: 30266
2014-05-12 10:29:41 [30267] [INFO] Booting worker with pid: 30267
2014-05-12 10:29:41 [30268] [INFO] Booting worker with pid: 30268
监听本机的5000端口,
工作模式为gevent,
开启4个进程

9.压力测试


在另一台虚拟上进行用ab模拟并发请求
报错:apr_socket_recv: No route to host (113)
  [ root@rs-1 ~]# time ab -n 200 -c 200 http://172.16.3.92/ 
This is ApacheBench, Version 2.3 
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 172.16.3.92 (be patient)
  apr_socket_recv: No route to host (113) 
  
解决方法:关闭目标服务器的防火墙
  [ root@rs-2 pythonTest]# service iptables stop 
  Flushing firewall rules:                                   [   OK  ] 
  Setting chains to policy ACCEPT: filter                    [   OK  ] 
  Unloading iptables modules:                                [   OK  ] 


ok, 这下可以压力测试了

转载于:https://my.oschina.net/mickelfeng/blog/879771

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值