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

  1. from flask import Flask
  2. from flask import render_template_string
  3.  
  4. import os
  5.  
  6. from werkzeug.contrib.fixers import ProxyFix
  7.  
  8. app = Flask(__name__)
  9.  
  10. @app.route("/")
  11. def index():
  12. return "Hello World"
  13.  
  14. app.wsgi_app = ProxyFix(app.wsgi_app)
  15. if __name__ == "__main__":
  16. 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

监听本机的5000port,

工作模式为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 <$Revision: 1554214 $>

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)

real 0m0.078s

user 0m0.021s

sys 0m0.046s


解决方法:关闭目标server的防火墙

[root@rs-2 pythonTest]# service iptables stop

Flushing firewall rules:                                   [  OK ]

Setting chains to policy ACCEPT: filter                    [  OK ]

Unloading iptables modules:                                [  OK ]

ok, 这下能够压力測试了

[root@rs-1 ~]# time ab -n 2000 -c 200 http://172.16.3.92/

This is ApacheBench, Version 2.3 <$Revision: 1554214 $>

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)

Completed 200 requests

Completed 400 requests

Completed 600 requests

Completed 800 requests

Completed 1000 requests

Completed 1200 requests

Completed 1400 requests

Completed 1600 requests

Completed 1800 requests

Completed 2000 requests

Finished 2000 requests

Server Software:        nginx/1.7.0

Server Hostname:        172.16.3.92

Server Port:            80

Document Path:          /

Document Length:        11 bytes

Concurrency Level:      200

Time taken for tests:   16.273 seconds

Complete requests:      2000

Failed requests:        0

Total transferred:      334000 bytes

HTML transferred:       22000 bytes

Requests per second:    122.90 [#/sec] (mean)

Time per request:       1627.313 [ms] (mean)

Time per request:       8.137 [ms] (mean, across all concurrent requests)

Transfer rate:          20.04 [Kbytes/sec] received

Connection Times (ms)

min  mean[+/-sd] median   max

Connect:        0   40 486.7      1    8992

Processing:   276 1032 250.5   1028    6300

Waiting:      273 1032 250.5   1027    6300

Total:        283 1072 618.1   1029   15292

Percentage of the requests served within a certain time (ms)

50%   1029

66%   1055

75%   1074

80%   1096

90%   1210

95%   1245

98%   1361

99%   2416

100%  15292 (longest request)

real 0m16.316s

user 0m0.598s

sys 0m1.447s

flask+gevent+gunicorn+nginx 初试的更多相关文章

  1. flask +gevent+nginx+Gunicorn+supervisor部署flask应用

    上篇   可以完美部署flask ,但是视乎在结合gevent+apscheduler 实现异步非阻塞后台和定时任务的时候视乎不是那么完美.请教了前辈,决定使用flask+gevent+nginx+g ...

  2. 基于flask+gunicorn+nginx来部署web App

    基于flask+gunicorn&&nginx来部署web App WSGI协议 Web框架致力于如何生成HTML代码,而Web服务器用于处理和响应HTTP请求.Web框架和Web服务 ...

  3. 【新手向】阿里云上ubuntu+flask+gunicorn+nginx服务器部署(二)项目部署

    本项目实现的是类似于ins的图片分享网站.继续(一),当nginx的配置已修改好后,要在远程服务器上部署网站,只需要几个步骤: 1 前期准备 2 将运行网站的代码从github上下载过来 3 下载依赖 ...

  4. Django + Gunicorn + Nginx 部署之路

    前言 最近,我已经成功将我的个人网站从 Flask 迁移到 Django 了,最早接触 Django 的时候大概是在 4 年前,我记得那个时候 Django 中的路由配置使用 正则 来进行的,但是我有 ...

  5. Flask+gevent 异步 WEB 架构

    :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...

  6. gunicorn+nginx配置方法

    对于gunicorn+nginx的配置,理解他们之间的关系很重要,以及最后如何确认配置结果是正确的也很重要 nginx 配置文件: 修改这个配置文件有3个用处: 假设服务器本身的Ip是A称为ip-A, ...

  7. 11: Django + gunicorn + Nginx 的生产环境部署

    1.1 gunicorn介绍   1.Gunicorn 1. Gunicorn是使用Python实现的WSGI服务器, 直接提供了http服务, 并且在woker上提供了多种选择, gevent, e ...

  8. 初次部署django+gunicorn+nginx

    初次部署django+gunicorn+nginx  博客详细地址  https://www.cnblogs.com/nanrou/p/7026802.html 写在前面,这只是我所遇到的情况,如果有 ...

  9. Django + Gunicorn + Nginx 部署 Ubuntu 服务器

    Django + Gunicorn + Nginx 部署服务器 获取腾讯云 root权限 本人的服务器使用的是腾讯云,腾讯云默认是没有开放 root 用户的,我们来创建 root 用户. 创建 roo ...

随机推荐

  1. WebView混合开发

    现在开发APP的方式变化,不在是传统的APP开发了,有很多的APP慢慢的转向混合模式的开发,使用WebView是传统开发模式转向混合模式的桥梁工具,结合了很多的Web前端开发界面,使得开发的速度加快, ...

  2. poj3254(状压dp)

    题目连接:http://poj.org/problem?id=3254 题意:一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相 ...

  3. Berkeley DB 使用

    http://www.ibm.com/developerworks/cn/linux/l-embdb/index.html UNIX/LINUX平台下的数据库种类非常多,参考资料1中 列举了其中的大部 ...

  4. java模拟浏览器包selenium整合了htmlunit,火狐浏览器,IE浏览器,opare浏览器驱

    //如果网页源码中有些内容是js渲染过来的,那你通过HttpClient直接取肯定取不到,但是这些数据一般都是通过异步请求传过来的(一般都是通过ajax的get或者post方式).那么你可以通过火狐浏 ...

  5. 使用JS模拟出Map对象

    近期要做的一个项目,支持方提供的一个Map方法,用着相当能够,功能稍有欠缺,因此我为之做了扩展,下面是代码: function Map() { this.elements = new Array(); ...

  6. 八.使用OpenCv图像平滑操作

    1.cvSmooth函数 函数 cvSmooth 可使用简单模糊.简单无缩放变换的模糊.中值模糊.高斯模糊.双边滤波的不论什么一种方法平滑图像.每一种方法都有自己的特点以及局限. 没有缩放的图像平滑仅 ...

  7. Failed to load libGL.so问题解决

    Ubuntu 14.04下启动模拟设备Android 4.2.2的时候报错: failed to load libgl.so 先用locate 命令定位libGL库, 然后加入�一个链接就可以: de ...

  8. JS兼容的方式来获取浏览器的宽度

    <script type="text/javascript"> //need to wait until onload so body is available win ...

  9. ibatis dynamic的用法

    <select id="idididid" resultClass="java.uitl.HashMap" parameterClass="ja ...

  10. 数据库连接技术之OLE DB

    之前的博客介绍了ODBC和JDBC.这次简单的介绍一下OLE DB.ODBC的总结不知道是没贴到博客上还是不在这个博客上,我再找找,没有的话我再补充到时候.好了.開始吧. 回想 之前呢介绍过了ODBC ...