Django中配置Gunicorn
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"
参考
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
第一章 Java多线程技能
进程和多线程的概念及其优点 进程是操作系统结构的基础,是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动;是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。进程是受操作系统管理的基本运行单元。 线程可以理解成是在进程中独立运行的子任务。比如QQ.exe运行时就有很多的子任务在同时运行。再如,好友视频线程、下载文件线程、传输数据线程、发送表情线程等,这些不同的任务或者说功能都可以同时运行,其中每一项任务完全可以理解成是“线程”在工作,传文件、听音乐、发送图片表情等功能都有对应的线程在后台默默地运行。 多线程的优点:可以最大限度的利用CPU的空闲时间来处理其他的任务,而CPU在这些任务之间不停的切换,由于切换的速度非常快,给使用者的感受就是这些任务似乎在同时运行。所以使用多线程技术后,可以在同一时间内运行更多不同种类的任务。 单任务的特点就是排队执行,也就是同步,就像在cmd中输入一条命令后,必须等待这条命令执行完才可以执行下一条命令一样。这就是单任务环境的缺点,即CPU利用率大幅降低。而多线程情况下,CPU完全可以在任务1和任务2之间来回切换,...
- 下一篇
Python读取大文件的"坑“与内存占用检测
python读写文件的api都很简单,一不留神就容易踩”坑“。笔者记录一次踩坑历程,并且给了一些总结,希望到大家在使用python的过程之中,能够避免一些可能产生隐患的代码。 1.read()与readlines(): 随手搜索python读写文件的教程,很经常看到read()与readlines()这对函数。所以我们会常常看到如下代码: with open(file_path, 'rb') as f: sha1Obj.update(f.read()) or with open(file_path, 'rb') as f: for line in f.readlines(): print(line) 这对方法在读取小文件时确实不会产生什么异常,但是一旦读取大文件,很容易会产生MemoryError,也就是内存溢出的问题。 ####Why Memory Error?我们首先来看看这两个方法: 当默认参数size=-1时,read方法会读取直到EOF,当文件大小大于可用内存时,自然会发生内存溢出的错误。 同样的,readlines会构造一个list。list而不是iter,所以所有的内容都...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果