服务器程序源代码分析之三:gunicorn
服务器程序源代码分析之三:gunicorn
时间:2014-05-09 11:33:54 类别:网站架构 访问: 641 次
gunicorn是一个python web 服务部署工具,类似flup,完全用python开发,参考了ruby的部署工具: Unicorn project
gunicorn主要功能:
wsgi-http 协议的转换
python有一个官方的module叫做WSGI(The Web Server Gateway Interface),版本号PEP333,定义了一些接口规范
所以凡是python web框架都会遵守这个规范,django或者web.py都是这样
gunicorn对协议的支持很单一:输入wsgi,输出http
flup也是输入wsgi,但支持多种输出:ajp,cgi,fcgi,scgi,就偏偏不支持http
所以flup和gunicorn是前浪后浪的关系
- IO模型采用pre-fork模式
- 子进程里面,可以支持sync,eventlet,gevent,tornado 4种网络处理方法,默认用sync
- gunicorn的代码质量比较差,起码比flup要差,缺乏python-style
python-style:只要看看python自带的lib就了然,就是那种感觉
sync的实现
- 采用阻塞的accept等待新连接
- 一旦连接成功,就用select来驱动所有的client
select是遍历fd_set的方式,并且在linux有句柄数量必须小于1024的限制,这两点导致了sync模式的并发能力有限,flup也是这样,如果选择sync模式,那么和用 flup 没有什么区别
gunicorn还可以采用异步IO
- 可以通过import代码包的方式,使用eventlet,gevent,tornado 之一
- 这3种都是高性能异步IO(Fast event loop based on libev (epoll on Linux, kqueue on FreeBSD))
- python 2.6就在select module里面加上了epoll/poll/kqueue/kevent 支持,把sync模块 改造为高性能异步IO其实非常容易
本文地址: http://lutaf.com/219.htm 鲁塔弗原创文章,欢迎转载,请附带原文链接
服务器程序源代码分析之三:gunicorn的更多相关文章
- PostgreSQL的 initdb 源代码分析之三
继续 其实接前面,整个while循环是这样的: ) { switch (c) { ...... } ...... } 这一句,c = getopt_long(argc, argv, "dD: ...
- Android系统默认Home应用程序(Launcher)的启动过程源代码分析
在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还需要有一个 Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home ...
- Android应用程序安装过程源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6766010 Android系统在启动的过程中, ...
- Android应用程序进程启动过程的源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址: http://blog.csdn.net/luoshengyang/article/details/6747696 Android 应用程序框架层创 ...
- Android应用程序绑定服务(bindService)的过程源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6745181 Android应用程序组件Serv ...
- Android应用程序内部启动Activity过程(startActivity)的源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6703247 上文介绍了Android应用程序的 ...
- Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6642463 在前面几篇文章中,我们详细介绍了A ...
- Android应用程序框架层和系统运行库层日志系统源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6598703 在开发Android应用程序时,少 ...
- Android应用程序组件Content Provider的启动过程源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6963418 通过前面的学习,我们知道在Andr ...
随机推荐
- batch 数字进制的问题
when set viable to number type in cmdexample: set /a num=0833echo %num% display: Invalid number. Nu ...
- 【译】在JavaScript中{}+{}的结果是什么?
原文链接:What is {} + {} in JavaScript? 最近,Gary Bernhardt在一个名为'Wat'的闪电演讲中提到了一些有趣的JavaScript技巧.当你把一个objec ...
- oracle手动启动服务
开始-控制面板->管理工具->服务->右键属性 oracle服务设定都是手动启动的,开机时只需要启动3个服务就好了: OracleOraDb11g_home1ClrAgent Ora ...
- 通过命令行连接oracle数据库/进入sql plus
1.直接打开SQL Plus登录,需要用户名和密码 开始->程序->Oracle->应用程序开发->sqlplus 我的电脑是“开始”->“Oracle - OraDb1 ...
- URAL 1024 Permutations(LCM)
题意:已知,可得出 P(1) = 4, P(2) = 1, P(3) = 5,由此可得出 P(P(1)) = P(4) = 2. And P(P(3)) = P(5) = 3,因此.经过k次如上变换, ...
- hash桶
#include <stdio.h> #include <stdlib.h> #include "chain.c" //include the chain. ...
- mysql的时间函数
from_unixtime()是MySQL里的时间函数 date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接是Unix 时间戳字符串 后面的 '%Y%m%d' 主要是将返回值 ...
- Redis 与 数据库处理数据的两种模式(转)
Redis 是一个高性能的key-value数据库. redis的出现,很大程度补偿了memcached这类key-value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用.它提供了Pyt ...
- ACE_linux:Reactor与Proactor两种模式的区别
一.概念: Reactor与Proactor两种模式的区别.这里我们只关注read操作,因为write操作也是差不多的.下面是Reactor的做法: 某个事件处理器宣称它对某个socket上的读事件很 ...
- PHP定时执行任务/Cron Job
对于PHP本身并没有一套解决方案来执行定时任务,不过是借助sleep函数完成的.这种方就是要提前做一些配置,如实现过程: ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执 ...