首页 > 其他 > 详细

gunicorn 详解

时间:2020-03-08 18:55:26      阅读:69      评论:0      收藏:0      [点我收藏+]

Gunicorn是一个unix上被广泛使用的高性能的Python WSGI UNIX HTTP Server。
和大多数的web框架兼容,并具有实现简单,轻量级,高性能等特点。

gunicorn 安装

pip install gunicorn
 

gunicorn + flask 简单示例

flask程序需要先安装flask module,pip install flask。

gunicorn_demo.py

  1.  
    from flask import Flask
  2.  
     
  3.  
    app = Flask(__name__)
  4.  
     
  5.  
     
  6.  
    @app.route(‘/demo‘, methods=[‘GET‘])
  7.  
    def demo():
  8.  
    return "gunicorn and flask demo."

通过gunicorn运行flask app

  1.  
    # gunicorn gunicorn_demo:app
  2.  
    [2017-12-23 10:36:09 +0000] [24441] [INFO] Starting gunicorn 19.7.1
  3.  
    [2017-12-23 10:36:09 +0000] [24441] [INFO] Listening at: http://127.0.0.1:8000 (24441)
  4.  
    [2017-12-23 10:36:09 +0000] [24441] [INFO] Using worker: sync
  5.  
    [2017-12-23 10:36:09 +0000] [24446] [INFO] Booting worker with pid: 24446

测试结果

  1.  
    # curl http://127.0.0.1:8000/demo
  2.  
    gunicorn and flask demo.

gunicorn 部署

gunicorn是一个wsgi http server,可以如上一章节所示直接起停,提供http服务。

不过在production环境,起停和状态的监控最好用supervisior之类的监控工具,然后在gunicorn的前端放置一个http proxy server, 譬如nginx。

下面是supervisor和nginx的配置。

supervisor_gunicorn.conf

  1.  
    [program:gunicorn_demo]
  2.  
    process_name=%(program_name)s
  3.  
    numprocs=1
  4.  
    priority=901
  5.  
    directory = /opt/gunicorn_demo/
  6.  
    command = /opt/virtualenv/bin/python /opt/virtualenv/bin/gunicorn -c gunicorn_demo.py gunicorn_demo:app
  7.  
    autostart = true
  8.  
    startsecs = 20
  9.  
    autorestart = true
  10.  
    startretries = 3
  11.  
    user = root
  12.  
    redirect_stderr = true
  13.  
    stdout_logfile_maxbytes = 20MB
  14.  
    stdout_logfile_backups = 10
  15.  
    stdout_logfile = /dev/null

-c gunicorn_demo.py, 即是gunicorn本身的配置文件,下面是gunicorn的基本配置,下一章节会详细说明gunicorn的配置项。

  1.  
    import multiprocessing
  2.  
     
  3.  
    bind = ‘127.0.0.1:8000‘
  4.  
    workers = multiprocessing.cpu_count() * 2 + 1
  5.  
     
  6.  
    backlog = 2048
  7.  
    worker_class = "gevent"
  8.  
    worker_connections = 1000
  9.  
    daemon = False
  10.  
    debug = True
  11.  
    proc_name = ‘gunicorn_demo‘
  12.  
    pidfile = ‘./log/gunicorn.pid‘
  13.  
    errorlog = ‘./log/gunicorn.log‘

nginx.conf part

  1.  
    server {
  2.  
    listen 80;
  3.  
    server_name sam_rui.com;
  4.  
    access_log /var/log/nginx/access.log;
  5.  
     
  6.  
    location / {
  7.  
    proxy_pass http://127.0.0.1:8000;
  8.  
    proxy_set_header Host $host;
  9.  
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  10.  
    }
  11.  
    }

gunicorn 详细配置

gunicorn配置项可以通过gunicorn的启动命令行中设定,也可以通过配置文件指定。强烈建议使用一个配置文件。

配置项如下:

server socket

  • bind
    监听地址和端口。

  • backlog
    服务器中在pending状态的最大连接数,即client处于waiting的数目。超过这个数目, client连接会得到一个error。
    建议值64-2048。

worker 进程

  • workers
    worker进程的数量。建议值2-4 x $(NUM_CORES), 缺省为1。

  • worker_class
    worker进程的工作方式。 有 sync, eventlet, gevent, tornado, gthread, 缺省值sync。

  • threads
    工作进程中线程的数量。建议值2-4 x $(NUM_CORES), 缺省值1。
    此配置只适用于gthread 进程工作方式, 因为gevent这种使用的是协程工作方式。

  • worker_connections
    客户端最大同时连接数。只适用于eventlet, gevent工作方式。

  • max_requests
    worker重启之前处理的最大requests数, 缺省值为0表示自动重启disabled。主要是防止内存泄露。

  • max_requests_jitter
    抖动参数,防止worker全部同时重启。

  • timeout
    通常设为30。

  • graceful_timeout
    接收到restart信号后,worker可以在graceful_timeout时间内,继续处理完当前requests。

  • keepalive
    server端保持连接时间。

security

  • limit_request_line
    http request line最大字节数。值范围0-8190, 0表示无限制。

  • limit_request_field
    http request中 header字段数的最大值。缺省为100,最大32768。

  • limit_request_field_size
    http request header字段最大字节数。0表示无限制。

调试

  • reload
    当代码有修改时,自动重启workers。适用于开发环境。

  • reload_extra_files
    扩展reload配置,增加templates,configurations等文件修改监控。

  • spew
    跟踪程序执行的每一行。

  • check_config
    检查配置。

server 机制

  • sendfile
    系统底层拷贝数据方式,提供performance。

  • chdir
    在app加载之前,进入到此目录。

  • daemon
    应用是否以daemon方式运行。

  • raw_env
    key=value, 传递环境参数。

  • pidfile
    pid存储文件路径。

  • worker_tmp_dir
    临时工作目录。

  • user
    指定worker进程的运行用户名。

  • group
    指定worker进程运行用户所在组。

  • umask
    gunicorn创建文件的缺省权限。

  • pythonpath
    附加到python path的目录列表。

日志

  • accesslog
    访问日志文件路径。

  • access_log_format
    日志格式。 例如 %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" 。

  • errorlog
    错误日志路径。

  • loglever
    日志级别。debug, info, warning, error, critical.

  • capture_output
    重定向stdout/stderr到error log file。

  • logger_class
    日志实现类。缺省gunicorn.glogging.Logger 。

  • logconfig
    日志配置文件。同python标准日志模块logging的配置。

进程名

  • proc_name
    设置进程名(setproctitle),在ps,top等命令中会看到. 缺省值为default_proc_name配置。

server钩子

  • on_starting
  • on_reload
  • when_ready
  • pre_fork
  • post_fork
  • post_worker_init
  • worker_init
  • worker_abort
  • pre_exec
  • pre_request
  • post_request
  • child_exit
  • worker-exit
  • nworkers_changed
  • on_exit




gunicorn 详解

原文:https://www.cnblogs.com/zzzxing/p/12443914.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!