




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Gunicorn初探初探Robby Zhou WSGIl WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。l WSGI 是作为 Web 服务器与 Web 应用程序或应用框架之间的一种低级别的接口,以提升可移植 Web 应用开发的共同点。WSGI 是基于现存的 CGI 标准而设计的。l 很多框架都自带了 WSGI server ,比如 Flask,webpy,Django、CherryPy等等
2、。当然性能都不好,自带的 web server 更多的是测试用途,发布时则使用生产环境的 WSGI server或者是联合 nginx 做 uwsgi 。 WSGI的作用的作用l WSGI有两方:“服务器”或“网关”一方,以及“应用程序”或“应用框架”一方。服务方调用应用方,提供环境信息,以及一个回调函数(提供给应用程序用来将消息头传递给服务器方),并接收Web内容作为返回值。l 所谓的 WSGI中间件同时实现了API的两方,因此可以在WSGI服务和WSGI应用之间起调解作用:从WSGI服务器的角度来说,中间件扮演应用程序,而从应用程序的角度来说,中间件扮演服务器。 Whats Gunicor
3、nlGunicorn()是一个 Python WSGI UNIX 的 HTTP 服务器, 是基于”pre-fork worker”模型,从 Ruby 的独角兽(Unicorn)项目移植。l Gunicorn 服务器与各种 Web 框架兼容,只需非常简单的执行,轻量级的资源消耗,以及相当迅速。 Gunicorn的特点的特点l 支持 Django,paster,wsgi程序l 非常容易配置(相比较而言)l 自动管理多个worker进程l 可以采用不同的后台扩展接口(sync, gevent, tornado等)l 原生并发访问性能不高,与 uWSGI, Bjoern等有一定
4、的性能差距l HA的方案还不够完善 Gunicorn的设计的设计l Gunicorn是基于”pre-fork worker”模型,这就意味着有一个中心主控master进程,由它来管理一组worker进程l Worker进程可以支持不同的IO方式(sync, gevent, eventlet, tornado, meinheld 等) Gunicorn的的源码结构l 从 Application.run() 开始,首先初始化配置,从文件读取,终端读取等等方式完成 configurate。然后启动 Arbiter,Arbiter 是实质上的 master 进程的核心,它首先从配置类中读取并设置,然后
5、初始化信号处理函数,建立 socket。然后就是开始 spawn 工作进程,根据配置的工作进程数进行 spawn。然后就进入了轮询状态,收到信号,处理信号然后继续。这里唤醒进程的方式是建立一个 PIPE,通过信号处理函数往 pipe 里 write,然后 master 从 select.select() 中唤醒。l 工作进程在 spawn 后,开始初始化,然后同样对信号进行处理,并且开始轮询,处理 HTTP 请求,调用 WSGI 的应用端,得到 resopnse 返回。然后继续。 Geventl Gevent是一种基于协程的Python网络库,它用到Greenlet提供的协 程,封装了libe
6、vent事件循环的高层同步APIl Gevent实现了WSGI,可以很方便的当作python的web server服务 器使用 Gevent的优点的优点l Gevent最明显的特征就是它惊人的性能,尤其是当与传统线程解决方案对比的时候。在这一点上,当负载超过一定程度的时候,异步I/O的性能会大大的优于基于独立线程的同步I/O这几乎是常识了。l Gevent提供了看上去非常像传统的基于线程模型编程的接口,但是在隐藏在下面做的是异步I/O。更妙的是,它使得这一切透明。你可以继续使用这些普通的Python模块,比如用urllib2去处理HTTP请求,它会用Gevent替换那些普通的阻塞的Socket
7、操作。 Gevent的性能的性能 Gevent的不足之处的不足之处l Gevent不能支持多进程。这意味着如果你要完全用到多核,你需要在多个端口上运行多个监听进程。可能需要运行类似于Nginx的东西去在这些服务监听进程中分发请求。l 国内使用得比较少,相关资料比较匮乏。 Meinheldl Meinheld 是一个高性能的兼容WSGI的web服务器,其有效利用了 greenlet和picoev的优势,能够以一种轻量级的方式支持异步网络IO Meinheld的特点的特点l 并发性能好,基本可以接近nginxl 能够很好地支持gunicornl HTTP协议的完善支持l 相关资料比较少,国内外成熟使用案例较少 几种流行的几种流行的Web Server压力测试对比压力测试对比l hello world输出l ab c 100 n 100000 Gunicorn的几种的几种worker模式性能模式性能l sync 同步IO,性能较差l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国工业大数据行业市场深度调研及前景趋势与投资研究报告
- 2025-2030中国尿路感染行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国家用按摩椅行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国实心碗离心机行业市场发展趋势与前景展望战略研究报告
- 医疗健康信息化背景下远程医疗的前景
- 从单一技能到综合素养现代医学人才的全面培养计划
- 多线程并行计算环境下的Linux应用优化-洞察阐释
- 基于AI的多表查询优化算法研究-洞察阐释
- 基于AR的孵育场景认知与情感唤醒研究-洞察阐释
- 医疗器械智能化教育培养未来医疗人才
- 2025新外研社版英语七年级下单词默写表
- 大部分分校:地域文化形考任务二-国开(CQ)-国开期末复习资料
- 远盛水工重力坝辅助设计系统用户使用手册
- 矿井瓦斯抽采
- 立法学完整版教学课件全套ppt教程
- 五年级下册科学说课课件 -1.2 沉浮与什么因素有关 |教科版 (共28张PPT)
- 通用城实景三维数据生产项目技术设计书
- 毕业设计(论文)-N402—1300型农用拖拉机履带底盘的设计
- 多重耐药菌感染的预防与控制 课件
- 设计公司钉钉考勤管理办法
- 砌体结构教案(共34页)
评论
0/150
提交评论