内容简介:Gunicorn是Python下的一个WSGI服务器,听起来很普通,不过因为它支持很多特性,在 Python界还是很流行,例如作为起Flask的父进程,支持用gevent把Flask打个patch等。它使用的是pre-fork的模式,即启动的时候fork出n个进程,然后master进程负责监听 信号和子进程,如果子进程挂了,那么master会拉一个新的起来,如果有对应信号, master会发起相应的动作。Gunicorn的选项从三个地方读取:
Gunicorn是 Python 下的一个WSGI服务器,听起来很普通,不过因为它支持很多特性,在 Python界还是很流行,例如作为起Flask的父进程,支持用gevent把Flask打个patch等。
它使用的是pre-fork的模式,即启动的时候fork出n个进程,然后master进程负责监听 信号和子进程,如果子进程挂了,那么master会拉一个新的起来,如果有对应信号, master会发起相应的动作。
Gunicorn的选项从三个地方读取:
-c <path/to/configuration>
顺序是从上往下,优先级递增。
详细的配置都在这里: http://docs.gunicorn.org/en/stable/settings.html
一般来说,起一个gunicorn作为服务器足以,但是有时候我们可以在Gunicorn前面挡一个 Nginx,原因如下:
- Nginx可以缓存住请求,然后内网再次发起请求,并且可以配置负载均衡,如果一台机器 的多进程(Gunicorn就是多进程)吃不消的情况下,负载均衡可以把请求打向多个机器
- Nginx替代Python处理静态文件的请求,以提高性能
- 很多时候一个机器上可能不止一个服务,需要像Nginx这样的web服务器做一次proxy_pass
示例配置文件:
# coding: utf-8 workers = 2 worker_class = "gevent" max_requests = 1024 daemon = False loglevel = 'info' capture_output = True errorlog = "-" bind = "0.0.0.0:10086"
示例启动命令:
gunicorn -c gunicorn_config.py main:app
通过gevent打patch实现的协程相比Tornado有以下不同:
- Tornado内置IOLoop,但是很多第三方库不支持,例如不能愉快的使用requests和SQLAlchemy, 否则就是阻塞,虽然网上有一些解决方案但是都不完美
- gevent性能比Tornado稍高
- gevent虽然是monkey patch但是有很多人维护,目前也比较稳定
- gevent打完补丁之后,我们以同步阻塞的方式写代码,但是最后能得到异步的效果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C语言接口与实现
David R. Hanson / 郭旭 / 人民邮电出版社 / 2011-9 / 75.00元
《C语言接口与实现:创建可重用软件的技术》概念清晰、实例详尽,是一本有关设计、实现和有效使用C语言库函数,掌握创建可重用C语言软件模块技术的参考指南。书中提供了大量实例,重在阐述如何用一种与语言无关的方法将接口设计实现独立出来,从而用一种基于接口的设计途径创建可重用的API。 《C语言接口与实现:创建可重用软件的技术》是所有C语言程序员不可多得的好书,也是所有希望掌握可重用软件模块技术的人员......一起来看看 《C语言接口与实现》 这本书的介绍吧!