uWSGI小记

举报
竹叶青 发表于 2019/10/15 12:33:39 2019/10/15
【摘要】 工作中使用uWSGI很久了,一直没有机会去了解它到底是如何工作的,借着最近维护独立Django工程的机会,来简单写下uWSGI相关的知识。用过Django的都知道,启动django web server的方法是$ python manage.py runserver这种方法作为一种测试和简单演示的demo尚可,但如果上到生产环境的时候就显得有些单薄了,比如,为了增加吞吐量要启动多个djang...

top1.86439ad.png

工作中使用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


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。