服务器程序源代码分析之三: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的实现

  1. 采用阻塞的accept等待新连接
  2. 一旦连接成功,就用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其实非常容易

标签: 网络程序IO模型pythongunicorn

本文地址: http://lutaf.com/219.htm 鲁塔弗原创文章,欢迎转载,请附带原文链接

服务器程序源代码分析之三:gunicorn的更多相关文章

  1. PostgreSQL的 initdb 源代码分析之三

    继续 其实接前面,整个while循环是这样的: ) { switch (c) { ...... } ...... } 这一句,c = getopt_long(argc, argv, "dD: ...

  2. Android系统默认Home应用程序(Launcher)的启动过程源代码分析

    在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还需要有一个 Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home ...

  3. Android应用程序安装过程源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6766010 Android系统在启动的过程中, ...

  4. Android应用程序进程启动过程的源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址: http://blog.csdn.net/luoshengyang/article/details/6747696 Android 应用程序框架层创 ...

  5. Android应用程序绑定服务(bindService)的过程源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6745181 Android应用程序组件Serv ...

  6. Android应用程序内部启动Activity过程(startActivity)的源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6703247 上文介绍了Android应用程序的 ...

  7. Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6642463 在前面几篇文章中,我们详细介绍了A ...

  8. Android应用程序框架层和系统运行库层日志系统源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6598703 在开发Android应用程序时,少 ...

  9. Android应用程序组件Content Provider的启动过程源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6963418 通过前面的学习,我们知道在Andr ...

随机推荐

  1. Android之文字点击链接

    定义textView1和textView2并获得组件. String html = "<font color='red'></font>"; html += ...

  2. cocos2dx-lua class语法糖要注意了

    cocos2dx-lua function.lua 定义了class方法,让lua实现继承像传统语言一样漂亮和方便 看定义 function class(classname, super) local ...

  3. Excel Operation

    在日常工作中, 常常需要收集统计一些数据, 然后整理到excel, 这种重复性的操作可以自己写个工具来实现. 采用HtmlUnitDriver 访问页面, 抓取数据, 再把数据列表通过调用POI放到e ...

  4. 第八篇、微信小程序-progress组件

    主要属性: 效果图: ml: <View > <!--百分比是30,并在进度条右侧显示百分比--> <Text class="text-style"& ...

  5. C#编写以管理员身份运行的程序

    using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; names ...

  6. spring aop配置及用例说明(3)

    欢迎转载交流:http://www.cnblogs.com/shizhongtao/p/3476336.html 1.这里说一下aop的@Around标签,它提供了在方法开始和结束,都能添加用户业务逻 ...

  7. [Linux] Linux学习笔记(5)-文件与目录管理

    1.Linux目录结构为树状结构,最顶层的目录为跟目录"/",其它目录通过挂载可以将它添加到目录树中,通过解除挂载移除它们. 2.绝对路径与相对路径 绝对路径写法:由根目录&quo ...

  8. 生成静态页面的PHP类

    生成静态页面的PHP类: 复制代码代码如下: <?php   class html   {    var $dir; //dir for the htmls(without/)    var $ ...

  9. Linux各发行版本 优缺点 简介

    2008.01.21 13:43 Linux最早由Linus Benedict Torvalds在1991年开始编写.在这之前,RichardStallman创建了Free SoftwareFound ...

  10. Homebrew下安装Cocoapods

    在Mavericks下安装Cocoapods遇到ruby安装问题,参照以下网址圆满解决问题. http://www.moncefbelyamani.com/how-to-install-xcode-h ...