美文网首页PythonFlask
Django中配置Gunicorn

Django中配置Gunicorn

作者: kekefund | 来源:发表于2018-08-24 10:03 被阅读408次

    Gunicorn是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器,移植至Ruby的独角兽(Unicorn)项目,使用pre-fork worker模式,具有使用非常简单,轻量级的资源消耗,以及高性能等特点。

    Django自带的简易服务器,它是一个纯Python写的轻量级的WEB服务器,但它是为了开发而设计的,不适合在生产环境中部署。

    python manage.py runserver 0.0.0.0:8000
    
    

    在Django中配置gunicorn,适合高并发的生产环境。

    特点

    • Gunicorn是基于prefork模式的Python wsgi应用服务器,支持 Unix like的系统

    • 采用epoll (Linux下) 非阻塞网络I/O 模型

    • 多种Worker类型可以选择 同步的,基于事件的(gevent tornado等),基于多线程的

    • 高性能,比之uwsgi不相上下

    • 配置使用非常简单

    • 支持 Python 2.x >= 2.6 or Python 3.x >= 3.2

    安装

    pip install gunicorn
    
    

    配置

    • settings.py

    在settings.py添加gunicorn。

    INSTALLED_APPS = [
        ...
        'gunicorn',
        ...
    ]
    
    • gunicorn配置文件gunicorn.conf.py
    import logging
    import logging.handlers
    from logging.handlers import WatchedFileHandler
    import os
    import multiprocessing
    
    bind = "0.0.0.0:8091"   #绑定的ip与端口
    backlog = 512                #监听队列数量,64-2048
    #chdir = '/home/test/server/bin'  #gunicorn要切换到的目的工作目录
    worker_class = 'sync' #使用gevent模式,还可以使用sync 模式,默认的是sync模式
    workers = 4 # multiprocessing.cpu_count()    #进程数
    threads = 16 #multiprocessing.cpu_count()*4 #指定每个进程开启的线程数
    loglevel = 'info' #日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
    access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
    
    # accesslog = "/home/log/gunicorn_access.log"      #访问日志文件
    #errorlog = "/home/log/gunicorn_error.log"        #错误日志文件
    accesslog = "-"  #访问日志文件,"-" 表示标准输出
    errorlog = "-"   #错误日志文件,"-" 表示标准输出
    
    proc_name = 'fof_api'   #进程名
    

    其中access_log_format选项的变量含义如下:

    其每个选项的含义如下:
    h          remote address
    l          '-'
    u          currently '-', may be user name in future releases
    t          date of the request
    r          status line (e.g. ``GET / HTTP/1.1``)
    s          status
    b          response length or '-'
    f          referer
    a          user agent
    T          request time in seconds
    D          request time in microseconds
    L          request time in decimal seconds
    p          process ID
    

    accesslog、errorlog日志文件可以写到文件,也可以标准输出到屏幕。

    正常启动

    以gunicorn.conf.py配置文件启动gunicorn

    gunicorn -c gunicorn.conf.py api.wsgi:application
    

    也可以直接启动

    gunicorn api.wsgi:application -b 0.0.0.0:8091 -w 4 -k gthread
    

    -w 4是启动4个进程,可以支持更多的并发。

    or

    gunicorn api.wsgi:application -b 0.0.0.0:8091 -w 4 -k gthread  --thread 40 --max-requests 4096 --max-requests-jitter 512
    

    参数详见官网的配置说明,参考文章底部的链接

    Docker方式启动

    Dockerfile文件

    FROM python:3.5
    RUN mkdir -p /usr/src/app
    WORKDIR /usr/src/app
     
    COPY requirements.txt /usr/src/app/requirements.txt
    RUN pip install -r /usr/src/app/requirements.txt
     
    COPY . /usr/src/app
    CMD gunicorn -c gunicorn.conf.py api.wsgi:application
    

    输出:

    [24/Aug/2018:09:45:42 +0800] <16> 10.154.53.113 "POST /api/v1/compose/ HTTP/1.0" 200 5.369574 1113 https://xxxx.com/ProductPerspective/detail" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
    [24/Aug/2018:09:45:43 +0800] <14> 10.154.53.113 "POST /api/v1/fund_static/ HTTP/1.0" 200 5.868518 481 https://xxxx.com/ProductPerspective/detail" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
    [24/Aug/2018:09:46:00 +0800] <334> 10.154.53.113 "POST /api/v1/adjustment/ HTTP/1.0" 200 0.845745 1398 https://xxxx.com/ProductPerspective/detail" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
    [24/Aug/2018:09:46:00 +0800] <12> 10.154.53.113 "POST /api/v1/risk/ HTTP/1.0" 200 0.860662 1254 https://xxxx.com/ProductPerspective/detail" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
    

    参考

    相关文章

      网友评论

        本文标题:Django中配置Gunicorn

        本文链接:https://www.haomeiwen.com/subject/kvfbiftx.html