文档章节

python + flask + uwsgi + gevent + nginx 环境搭建(非阻塞)

dchuang
 dchuang
发布于 2015/08/09 11:25
字数 851
阅读 4918
收藏 7

    Flask是Python中一个微型的Web开发框架。在debug 模式 或 单纯的 uwsgi模式下,flask是阻塞模式的,也就是说一次只能效应一个请求,或者在uwsgi 开启多进程,响应已知的请求个数;我们这里使用  uwsgi 和 gevent 配合nginx 解决flask的阻塞模式。

原文链接:http://www.huangdc.com/96

1、环境

    CentOS Linux release 7.0.1406 (Core)

    Python 2.7.5

2、安装类库

yum install python-devel zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc


3、下载并安装python 包管理软件 pip 

    查看python 版本

[root@localhost ~]# python -V
Python 2.7.5

   下载 pip-7.1.0.tar.gz

wget https://pypi.python.org/packages/source/p/pip/pip-7.1.0.tar.gz#md5=d935ee9146074b1d3f26c5f0acfd120e

    解压安装

tar zxf pip-7.1.0.tar.gz
cd pip-7.1.0
python setup.py install

## 提示下列信息,,且无报错,说明安装成功
Installed /usr/lib/python2.7/site-packages/pip-7.1.0-py2.7.egg
Processing dependencies for pip==7.1.0
Finished processing dependencies for pip==7.1.0


    下载 setuptools-18.1.tar.gz

wget https://pypi.python.org/packages/source/s/setuptools/setuptools-18.1.tar.gz#md5=f72e87f34fbf07f299f6cb46256a0b06

    解压安装

tar zxf setuptools-18.1.tar.gz 
cd setuptools-18.1
python setup.py install

## 提示下列信息,,且无报错,说明安装成功
Installed /usr/lib/python2.7/site-packages/setuptools-18.1-py2.7.egg
Processing dependencies for setuptools==18.1
Finished processing dependencies for setuptools==18.1


4、安装 flask / uwsgi / gevent  / nignx 

    安装 flask

pip install flask

## 提示下列信息,,且无报错,说明安装成功
Successfully installed Jinja2-2.8 MarkupSafe-0.23 Werkzeug-0.10.4 flask-0.10.1 itsdangerous-0.24

    安装uwsgi

pip install uwsgi

## 提示下列信息,,且无报错,说明安装成功
Collecting uwsgi
  Using cached uwsgi-2.0.11.1.tar.gz
Installing collected packages: uwsgi
  Running setup.py install for uwsgi
Successfully installed uwsgi-2.0.11.1

    安装gevent

pip install gevent

## 提示下列信息,,且无报错,说明安装成功
  Running setup.py install for greenlet
  Running setup.py install for gevent
Successfully installed gevent-1.0.2 greenlet-0.4.7

    下载 并 编译安装nginx 

useradd www
wget http://nginx.org/download/nginx-1.8.0.tar.gz
tar zxf nginx-1.8.0.tar.gz 
cd nginx-1.8.0

./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
make
make install


5、 新建flask app 文件  /data/wwwroot/myapp.py:

[root@localhost ~]# mkdir /data/wwwroot -p
[root@localhost ~]# cd /data/wwwroot/
[root@localhost wwwroot]# cat myapp.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

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


6、配置 uWSGI  及 gevent 

    (1)配置 uwsgi.ini 文件  vim /usr/local/nginx/conf/uwsgi.ini

[uwsgi]
    master = true
    vhost = true
    workers = 2
    reload-mercy = 10
    vacuum = true
    max-requests = 1000
    limit-as = 6048
    chmod-socket = 666
    socket = /tmp/uwsgi.sock
    chdir = /data/wwwroot/       ##flask app 目录
    module = myapp               ## flask app 名称,也就是我们的 myapp.py 
    callable = app
    touch-reload = /data/wwwroot/
    pidfile = /var/run/uwsgi.pid
    daemonize = /usr/local/nginx/logs/uwsgi.log
    gevent = 100        ## 加入 gevent = 100 ,非阻塞模式

    (2)   再次配置  cat /data/wwwroot/myapp.py

## 在文件头加入下面两行
from gevent import monkey
monkey.patch_all()

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

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

    (3)启动 uwsgi  ,当然你可以自己写个启动脚本,这里测试就不写了

/usr/bin/uwsgi --ini /usr/local/nginx/conf/uwsgi.ini


7、配置nginx 

    (1)添加配置文件 cat /usr/local/nginx/conf/vhosts/uwsgi_flask.conf

server {
	listen 80;
	server_name 192.168.1.105;
	index  index.htm index.html;
	location / {
		include uwsgi_params;
		uwsgi_pass unix:/tmp/uwsgi.sock;
	}
}

    (2)修改nginx ;加入include vhosts/uwsgi_flask.conf;

    (3)启动nginx 

cd /usr/local/nginx/sbin/
./nginx


8、访问  http://192.168.1.105

好了,访问正常,如果想测试flask的阻塞模式和非阻塞模式的话,你可以在 myapp.py 添加多个url ,并且加上sleep ;访问测试一下即可

原文链接:http://www.huangdc.com/96

© 著作权归作者所有

dchuang

dchuang

粉丝 9
博文 12
码字总数 12298
作品 0
深圳
私信 提问
Linux搭建Python web环境(nginx + flask + uwsgi)

去年的时候,就曾使用Nginx+Flask+uwsgi搭建过python的web环境。但在最近搭建的时候,又去网上找了一遍教程,所以打算写一篇笔记做下记录。 在搭建之前,有必要了解下发送一个请求的整个流程...

liuchungui
2018/05/14
0
0
nginx+uwsgi+flask环境搭建

想自己搭建一个Blog,功能不是很复杂,所以选用了python的flask框架,在参照网上的资料搭出Hello World之后将知识汇总一下,以便以后查看。 系统:Ubuntu 14.04 首先安装flask,nginx,pip(方...

L很失败L
2015/08/08
1K
2
flask+uwsgi+supervisor+nginx在局域网服务器上部署实践

flask可以快速的搭建http服务,但是为了搭建网站还是需要web服务器和相关监控管理操作,一套flask、uwsgi、supervisor、nginx是较好的完整解决方案。 本文对自己学习做一个记录,以一个简单的...

zoulala
2018/09/05
176
0
python + django + bootstrap + uWSGI + nginx 环境搭建

原文:http://www.huangdc.com/103 在了解 uWSGI 之前,我们不妨先了解一下 python http服务器? 要使 Python 写的程序能在 Web 上被访问,还需要搭建一个支持 Python 的 HTTP 服务器,列举几...

dchuang
2015/07/19
510
0
Python Web开发最难懂的WSGI协议,到底包含哪些内容?

本文转自: https://segmentfault.com/a/1190000011365430 我想大部分Python开发者最先接触到的方向是WEB方向(因为总是有开发者希望马上给自己做个博客出来,例如我),既然是WEB,免不了接触...

Mike__Jiang
02/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
14
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
15
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部