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
     
     
  • 相关阅读:
    freenas的踩坑记录:群晖CIFS挂载freeNas的smb共享目录
    【ikuai】爱快软路由上手
    Nacos集成Spring Cloud Gateway使用第三章:nacos配置中心
    Nacos集成Spring Cloud Gateway使用第二章:上手demo
    Nacos集成Spring Cloud Gateway使用第一章:理解解释
    函数指针数组
    回调函数
    使用C语言实现strcpy函数和字符串大小写交换
    Qt : Setting应用程序的数据保存和读取
    Qt 文件操作以及字体颜色选择
  • 原文地址:https://www.cnblogs.com/ice5/p/13851335.html
Copyright © 2011-2022 走看看