zoukankan      html  css  js  c++  java
  • gunicorn 详解

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

    gunicorn 安装

    pip3 install gunicorn

    gunicorn + flask 简单示例

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

    gunicorn_demo.py

    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route('/demo', methods=['GET'])
    def demo():
        return "gunicorn and flask demo."

    通过gunicorn运行flask app

    gunicorn gunicorn_demo:app

    gunicorn 部署

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

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

    下面是supervisor和nginx的配置。

    supervisor_gunicorn.conf

    [program:gunicorn_demo]
    process_name=%(program_name)s
    numprocs=1
    priority=901
    directory = /opt/gunicorn_demo/
    command = /opt/virtualenv/bin/python /opt/virtualenv/bin/gunicorn -c gunicorn_demo.py gunicorn_demo:app
    autostart = true
    startsecs = 20
    autorestart = true
    startretries = 3
    user = root
    redirect_stderr = true
    stdout_logfile_maxbytes = 20MB
    stdout_logfile_backups = 10
    stdout_logfile = /dev/null

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

    import multiprocessing
    
    bind = '127.0.0.1:8000'
    workers = multiprocessing.cpu_count() * 2 + 1
    
    backlog = 2048
    worker_class = "gevent"
    worker_connections = 1000
    daemon = False
    debug = True
    proc_name = 'gunicorn_demo'
    pidfile = './log/gunicorn.pid'
    errorlog = './log/gunicorn.log'

    nginx.conf 部分配置

    server {
        listen 80;
        server_name sam_rui.com;
        access_log  /var/log/nginx/access.log;
    
        location / {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

    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
     
     
  • 相关阅读:
    免费的视频、音频转文本
    Errors are values
    Codebase Refactoring (with help from Go)
    Golang中的坑二
    Cleaner, more elegant, and wrong(msdn blog)
    Cleaner, more elegant, and wrong(翻译)
    Cleaner, more elegant, and harder to recognize(翻译)
    vue控制父子组件渲染顺序
    computed 和 watch 组合使用,监听数据全局数据状态
    webstorm破解方法
  • 原文地址:https://www.cnblogs.com/ice5/p/13851335.html
Copyright © 2011-2022 走看看