当前位置: 首页 > news >正文

python3 django gunicorn

首先,Gunicorn是一个高效的Web服务器,地位相当于Java中的Tomcat。简单来说gunicorn封装了HTTP的底层实现,我们通过gunicorn启动服务,用户请求与服务相应都经过gunicorn传输。

下载gunicorn的方法也比较简单,在django工程里一般都是直接写到requirements.txt文件中,当然也可以手动下载,执行pip install gunicorn 即可。

接下来介绍如何使用gunicorn来启动django服务。

其实,这个过程到也简单,就一个命令就可以了。

python3 gunicorn application -c gunicorn_conf.py

一步一步看,python3是指python的解释器,gunicorn是下载下来的python包, application是从wsgi中引出来的django服务信息,上面有说到gunicorn就是一个web服务器,所以gunicorn_conf.py就是它的配置文件了。

看个实际中使用的命令:

sudo /build/mts/mydjango_app/run_gunicorn.sh -c /build/mts/service/mydjango_app/gunicorn_conf.py

这样就可以直接启动django服务了。

其中,run_gunicorn.sh中的内容为:

#!/bin/bash
set -eenvdir=/build/mts/mydjango_app/py38envexport PYTHONDONTWRITEBYTECODE=1exec $envdir/bin/python3 $envdir/bin/gunicorn mydjango_app.wsgi:application "$@"

在看看gunicorn_conf.py中的内容:

user = 'mts'
group = 'mts'logconfig = '/build/mts/service/webapps/log_config.ini'
access_log_format = '%(r)s | %(h)s | %(b)s | %(s)s | %(D)s us'bind = '0.0.0.0:8001'workers = 16
timeout = 90
max_requests = 500
# pass the ssl values as being forwarded from nginx
secure_scheme_headers = {}

最后,再看看,所谓的wsgi.py是个啥内容:

import osfrom django.core.wsgi import get_wsgi_applicationos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings')application = get_wsgi_application()

所以,不难发现,上面提到的实际使用的关于gunicorn的shell命令,就是我上面写的命令:

python3 gunicorn application -c gunicorn_conf.py

这个命令中,只有application这个参数,才是将gunicorn(web服务),与django工程勾连到一起的参数。

上面提到的关于gunicorn的用法,大体上算是生产环境上的用法,之所以说大体上,就是因为,在gunicorn_conf.py中,bind参数,我选择监听的是本地的地址,这显然是为了测试所做出的选择。生产环境往往bind参数会选择绑定nginx的一个地址。因为gunicorn 可以单独提供服务,但生产环境一般不这样做。首先静态资源(jscssimg)会占用不少的请求资源,而对于 gunicorn 来讲它本身更应该关注实际业务的请求与处理而不应该把资源浪费在静态资源请求上;此外,单独运行 gunicorn 是没有办法起多个进程多个端口来负载均衡的。nginx 的作用就是弥补以上问题,首先作为前端服务器它可以处理一切静态文件请求,此时 gunicorn 作为后端服务器,nginx 将会把动态请求转发给后端服务器,因此我们可以起多个 gunicorn 进程,然后让 nginx 作均衡负载转发请求给多个 gunicorn 进程从而提升服务器处理效率与处理能力。最后,nginx 还可以配置很多安全相关、认证相关等很多处理,可以让你的网站更专注业务的编写,把一些转发规则等其它业务无关的事情交给 nginx 做。

大体上,就是这些了。

http://www.lryc.cn/news/7607.html

相关文章:

  • 专家分享 | 租赁型售楼处标准化示范区提效研究
  • linux之echo使用技巧
  • Keras实例教程(7)之构建模型的第三种方式
  • 【JUC并发编程】18 CopyOnWriteArrayList源码也就够看2分钟
  • 如何优雅的实现回调函数?
  • 3GPP-NR Band20标准定义频点和信道(3GPP V17.7.0 (2022-12))
  • Excel表格的公式不想显示出来,可以这样操作
  • 【零基础入门前端系列】—语义化标签、实体字符、视频、音频(八)
  • 超详细讲解线性表和顺序表!!
  • 大数据之-Nifi-Nifi的安装_启动_认识Nifi的操作台---大数据之Nifi工作笔记0002
  • 【大数据clickhouse】clickhouse 常用查询优化策略详解
  • 【Java项目】基于Java+MySQL+Tomcat+maven+Servlet的个人博客系统的完整分析
  • java 程序员怎么做找工作
  • S7-1200对于不同项目下的PLC之间进行开放式以太网通信的具体方法示例
  • 操作系统(四):磁盘调度算法,先来先服务,最短寻道时间优先,电梯算法
  • maven解决包冲突简单方式(插件maven helper | maven指令)
  • 100行Pytorch代码实现三维重建技术神经辐射场 (NeRF)
  • linux操作系统篇
  • redis+token实现登录校验,前后端分离,及解跨域问题的4种方法
  • 怎么解密MD5,常见的MD5解密方法,一看就会
  • Vue3 目录结构
  • Tsp_nurrec表空间满处理记录20230215
  • 影像测量设备都有什么?有哪些影像仪器?
  • Transformer:开启CV研究新时代
  • Flink X Hologres构建企业级Streaming Warehouse
  • 关于 mysql数据库插入中文变空白 的解决方法
  • 不可错过的SQL优化干货分享-sql优化、索引使用
  • vue3:直接修改reative的值,页面却不响应,这是什么情况?
  • 从Vue2 到 Vue3,这些路由差异你需要掌握!
  • Maxwell简介、部署、原理和使用介绍