flask+gevent+gunicorn+nginx 初试
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
监听本机的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 初试的更多相关文章
- flask +gevent+nginx+Gunicorn+supervisor部署flask应用
上篇 可以完美部署flask ,但是视乎在结合gevent+apscheduler 实现异步非阻塞后台和定时任务的时候视乎不是那么完美.请教了前辈,决定使用flask+gevent+nginx+g ...
- 基于flask+gunicorn+nginx来部署web App
基于flask+gunicorn&&nginx来部署web App WSGI协议 Web框架致力于如何生成HTML代码,而Web服务器用于处理和响应HTTP请求.Web框架和Web服务 ...
- 【新手向】阿里云上ubuntu+flask+gunicorn+nginx服务器部署(二)项目部署
本项目实现的是类似于ins的图片分享网站.继续(一),当nginx的配置已修改好后,要在远程服务器上部署网站,只需要几个步骤: 1 前期准备 2 将运行网站的代码从github上下载过来 3 下载依赖 ...
- Django + Gunicorn + Nginx 部署之路
前言 最近,我已经成功将我的个人网站从 Flask 迁移到 Django 了,最早接触 Django 的时候大概是在 4 年前,我记得那个时候 Django 中的路由配置使用 正则 来进行的,但是我有 ...
- Flask+gevent 异步 WEB 架构
:first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...
- gunicorn+nginx配置方法
对于gunicorn+nginx的配置,理解他们之间的关系很重要,以及最后如何确认配置结果是正确的也很重要 nginx 配置文件: 修改这个配置文件有3个用处: 假设服务器本身的Ip是A称为ip-A, ...
- 11: Django + gunicorn + Nginx 的生产环境部署
1.1 gunicorn介绍 1.Gunicorn 1. Gunicorn是使用Python实现的WSGI服务器, 直接提供了http服务, 并且在woker上提供了多种选择, gevent, e ...
- 初次部署django+gunicorn+nginx
初次部署django+gunicorn+nginx 博客详细地址 https://www.cnblogs.com/nanrou/p/7026802.html 写在前面,这只是我所遇到的情况,如果有 ...
- Django + Gunicorn + Nginx 部署 Ubuntu 服务器
Django + Gunicorn + Nginx 部署服务器 获取腾讯云 root权限 本人的服务器使用的是腾讯云,腾讯云默认是没有开放 root 用户的,我们来创建 root 用户. 创建 roo ...
随机推荐
- 在ireport中使用checkbox
在网上搜索了很多实现checkbox的办法, 主要是利用打钩图片实现. 下面是我的做法,也不怎么高明, 不过比利用图片好. 后台 map.put("lifeTimePartFlag" ...
- XmlDocument.Load()加载xml文件时,提示分析 EntityName 时出错的问题。
今天一个接口突然报错,错误是: 分析 EntityName 时出错. 行 35,位置 90. xmlDoc.Load(System.Web.HttpContext.Current.Server.Map ...
- red hat Linux 使用CentOS yum源更新
red hat linux是商业版软件,没有经过注册是无法使用红帽 yum源更新软件的,使用CentOS源更新操作如下: 1.删除red hat linux 原有的yum 源 rpm -aq | gr ...
- Conversion to Dalvik format failed: Unable to execute dex
最近莫名奇妙遇到“Conversion to Dalvik format failed: Unable to execute dex”错误,stackoverflow以后得到结果 把项目中classp ...
- Learning Cocos2d-x for WP8(1)——创建首个项目
原文:Learning Cocos2d-x for WP8(1)--创建首个项目 Cocos2d-x for WP8开发语言是C++,系列文章将参考兄弟篇Learning Cocos2d-x for ...
- VMware3种网络模式
VMware网络配置详解一:三种网络模式简介 安装好虚拟机以后,在网络连接里面可以看到多了两块网卡: 其 中VMnet1是虚拟机Host-only模式的网络接口,VMnet8是NAT模式的网络接口, ...
- hdu 4857 逃生 拓扑排序+PQ,剥层分析
pid=4857">hdu4857 逃生 题目是求拓扑排序,但不是依照字典序最小输出,而是要使较小的数排在最前面. 一開始的错误思路:给每一个点确定一个优先级(该点所能到达的最小的点) ...
- linux查看CPU和内存信息
一 先来看看ps命令: 1.查看当前某个时间点的进程:ps命令就是最基本同时也是非常强大的进程查看命令.使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结束.进程有没有僵死. 哪些进程占用了 ...
- DevExpress控件使用之RichEditControl的使用
原文:DevExpress控件使用之RichEditControl的使用 做Winform的,我们一般都知道,传统.NET界面有一个RichTextBox控件,这个是一个富文本控件,可以存储图片文字等 ...
- current online redo logfile 丢失的处理方法
昨天做了rm -rf操作后的恢复演练,并且是在没有不论什么备份的情况下.今天在做破坏性操作前,做了个rman全备,然后在线删除所有数据库文件,包含控制文件,数据文件,在线日志文件,归档文件等.来看看有 ...