<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">官方地址:http://gunicorn.org/</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> http://docs.gunicorn.org/en/19.2/</span>
참조 주소: http://www.cnblogs.com/ArtsCrafts/p/gunicorn.html
.com/1030776/1276364
1. 소개
WSGI 서버란 무엇입니까?
예를 들어 Flask, webpy, Django 및 CherryPy는 모두 WSGI 서버와 함께 제공됩니다. 물론 성능은 좋지 않습니다. 내장된 웹 서버는 테스트에 더 적합합니다. 온라인에 게시할 때는 고성능 wsgi 서버를 사용하거나 nginx와 결합하여 uwsgi를 수행합니다.
2. gunicorn 설치
~$ sudo pip install gunicorn
Gunicorn이 비동기 작업자를 지원하도록 하려면 Python 패키지 3개를 설치해야 합니다. 🎜>
~$ sudo pip install greenlet ~$ sudo pip install eventlet ~$ sudo pip install gevent참고: Greenlet 설치에 실패하면 Python 헤더를 설치해야 합니다 Gunicorn(버전 19.1.1)
예를 들어 Python 패키지 gunicorn_app이 있고, 현재 디렉터리 MyApp 디렉터리 아래 gunicorn_app 패키지에는 WSGI 응용 프로그램 파일 test.py가 있습니다.
그러면 module_name을 gunicorn_app.test로 직접 작성할 수 있습니다.
Variable_name은 module_name 파일에서 호출할 객체(WSGI 호출 가능, 함수일 수 있음)의 이름을 나타냅니다.
위의 예에 따르면 현재 디렉터리는 /home/workspace/myapp이고 myapp에 gunicorn_app 패키지가 있습니다. test.py 코드는 다음과 같습니다.
.py에서 테스트 앱
def app(environ, start_response): """Simplest possible application object""" data = 'Hello, World!\n' status = '200 OK' response_headers = [ ('Content-type','text/plain'), ('Content-Length', str(len(data))) ] start_response(status, response_headers) return iter([data])
2. gunicorn_django
guniorn_django 명령은 Django 앱을 배포하는 데 사용됩니다. 건니콘 서버.
실제로는 매우 간단합니다. gunicorn_django를 Django에 더 적합하도록 특수 처리했다는 점만 빼면 원리는 gunicorn과 같습니다.
기본 사용법: gunicorn_django [OPTIONS] [SETTINGS_PATH]
OPTIONS는 이전에 언급되었습니다.
SETTINGS_PATH django 앱의 settings.py 파일이 있는 디렉터리입니다. 작성하지 않으면 기본적으로 현재 디렉터리에서 검색됩니다.
하지만 이 사용법은 Django1.4 이전에도 적용됩니다. Django1.4 이상 버전에서는 gunicorn 명령을 사용하는 것이 좋습니다.
3. gunicorn_paster
이 명령에 관심이 있다면 공식 문서에서 학습할 수 있습니다.
3. Gunicorn 구성
Gunicorn은 세 곳에서 구성 정보를 읽습니다.
첫 번째: 프레임워크에서 정의한 구성 정보를 읽습니다. 현재는 Paster 프레임워크에만 유효합니다.
두 번째 장소: 명령줄에 정의됩니다. 명령줄에 정의된 구성 정보는 프레임워크에 정의된 동일한 매개변수 이름의 값을 덮어씁니다.
세 번째: 구성 파일을 생성하고 파일에 구성 정보를 씁니다(파이썬 소스 파일이므로 파이썬 코드 작성과 같습니다).
gunicorn -h를 통해 모든 명령 구성 정보를 봅니다.
공식 문서를 통해 더 자세한 정보를 볼 수도 있습니다: http://docs.gunicorn.org/en/19.2/
예를 들어 위의 myapp 예시를 기반으로
gunicorn --workers=4 --bind=127.0.0.1:8000 myapp.gunicorn_app.test:app
위 명령은 4개의 워커를 시작하고 127.0.0.1:8000
에 바인딩합니다. 또는 구성 파일을 사용할 수 있습니다. 다음은 config.py 구성 파일 소스 코드입니다.
gunicorn --config=config.py myapp.gunicorn_app.test:app
import multiprocessing bind = "127.0.0.1:8001" workers = multiprocessing.cpu_count() * 2 + 14. gunicorn 프레임워크 소개
Gunicorn是基于pre-fork模型的。也就意味着有一个中心管理进程(master process)用来管理worker进程集合。Master从不知道任何关于客户端的信息。所有请求
和响应处理都是由worker进程来处理的。
Master(管理者)
主程序是一个简单的循环,监听各种信号以及相应的响应进程。master管理着正在运行的worker集合。
Worker类型
1. Sync Workers
最基本的也是默认的worker type。
一个同步的worker class,同一时间只能控制一个request请求。
2. Async Workers
异步workers的使用是基于Greenlets(通过Eventlet和Gevent)。所以使用此worker type之前一定要安装好python对应的包。
Greenlets是python多线程协作的一个实现。
3. Tornado Workers
这是一个Tornado worker class。
五、Gunicorn部署
使用Gunicorn必须基于一个代理服务器。
1. Nginx Configuration
虽然有很多HTTP代理可以使用,但是我们还是强烈推荐Nginx。如果你选择了其他代理服务器,你需要确认,当你使用默认的Gunicorn workers时,它能够buffers slow clients。没有buffering Gunicorn将很容易受 denial of service attacks的影响。也可使用 slowloris 去核实你的代理服务器是否工作良好。
如下是一个nginx配置文件实例(假设127.0.0.1:8888端口已经被gunicorn绑定监听):
server { #listen 80; ## listen for ipv4; this line is default and implied #listen [::]:80 default ipv6only=on; ## listen for ipv6 listen 80; client_max_body_size 4G; server_name www.android_stat.com keepalive_timeout 5; location / { try_files $uri @proxy_to_app; } location @proxy_to_app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://127.0.0.1:8888; }六、监控Gunicorn
注意:要监控Gunicorn的时候,Gunicorn不能启动daemon模式,如果使用daemon模式会fork出一个进程,这样监控工具就没法监控这个进程。
我在这只介绍supervisor
1. Supervisor
Supervisor可以用来监控进程,下面是一个简单的supervisor的配置文件:
[program:gunicorn] command=/path/to/gunicorn main:application -c /path/to/gunicorn.conf.py directory=/path/to/project user=nobody autostart=true autorestart=true redirect_stderr=true
以上就介绍了nginx+gunicorn+django,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。