uWSGI小记
工作中使用uWSGI很久了,一直没有机会去了解它到底是如何工作的,借着最近维护独立Django工程的机会,来简单写下uWSGI相关的知识。
用过Django的都知道,启动django web server的方法是
$ python manage.py runserver
这种方法作为一种测试和简单演示的demo尚可,但如果上到生产环境的时候就显得有些单薄了,比如,为了增加吞吐量要启动多个django服务的时候怎么办,有某个http request处理很长时间导致整个进程block如何处理等,这就需要有个hosting server来对Django框架进行管理。
uWSGI就是这样的application server container。单看名字会以为uWSGI和WSGI有什么关系,其实uWSGI不仅支持Django,Flask等python系的web框架,对于Ruby,Perl的web框架也是支持的。做为一个通用web server,取名中包含WSGI是为了向python的WSGI标准致敬,也是因为WSGI插件是uWSGI的第一个插件。
uWSGI可作为http服务器启动,与Django工程采用如下方式交互
uwsgi --socket 127.0.0.1:3031 --chdir /home/foobar/myproject/ --wsgi-file myproject/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
其中processes
参数指定了进程的启动数量;socket
选项用于有前置服务器如Nginx的情况,最新版本的Nginx已经支持了uwsgi协议,通过如下配置可将请求转发到uWSGI服务器。如果没有Niginx,可以直接使用参数http
。
location / { include uwsgi_params; uwsgi_pass 127.0.0.1:3031; }
uWSGI支持通过xml或ini文件来制定配置参数,像上面的命令行可用如下配置文件file.ini
来表示,启动命令也相应变成
[uwsgi]socket = 127.0.0.1:3031chdir = /home/foobar/myproject/wsgi-file = myproject/wsgi.pyprocesses = 4threads = 2stats = 127.0.0.1:9191
最后说一下haraki, 该配置用于指定当一个http请求多久时间没有响应后会被kill掉。如在xml中配置<harakiri>5</harakiri>
则以为着5s内程序处理不完请求将会被杀掉。
本文转载自异步社区
原文链接:
https://www.epubit.com/articleDetails?id=N80ce8ec2-b1d8-45a2-8990-7e02036a24b9 |
- 点赞
- 收藏
- 关注作者
评论(0)