当前位置: 首页 > 网络应用技术

如何实施Django(Django并发)

时间:2023-03-07 22:10:03 网络应用技术

  简介:本文的首席执行官注释将介绍有关Django如何实施并发的相关内容。我希望这对每个人都会有所帮助。让我们来看看。

  当使用Python进行系统管理时,尤其是同时操作多个文件目录,或者远程控制多个主机,并行操作可以节省大量时间。Multi -Processes是实现的手段之一。需要注意的问题是:

  例如,当操作对象的数量不大时,您可以直接在多处理中使用该处理来动态开发多个进程,十几打,但是如果有数百或一千个过程。。目前,可以发挥过程池的功效。

  我们可以通过维护过程池(例如HTTPD的过程模式)来控制过程数,该过程模式指定了最小过程编号和最大过程编号。

  PS:对于远程进程调用的高级应用程序,应使用该过程池。池可以提供指定的过程供用户致电。当将新请求提交到池中时,如果池不满,则它将成为执行请求的新过程;但是,如果池中的进程数量达到了最大的值,则该请求将等到流程在池中结束,并且过程池中的过程被重复使用。

  创建过程池的过程:如果将数字程序指定为3,则过程池将从划痕创建三个进程,然后从头到尾使用这三个过程来执行所有任务,并且不会打开其他进程。

  参数简介:

  方法简介:

  主要方法:

  其他方法(了解零件)

  应用:

  发现:积极向多个客户端,服务端同时只有3个不同的PID,杀死一个客户,另一个客户将进来。

  打回来:

  需要调整功能的场景:一旦处理了过程池中的任何任务,主过程就会立即告知:我有很多数量,您可以处理我的结果。主过程调用功能来处理结果,并且该功能是回调功能

  我们可以将耗时(阻止)的任务放在进程池中,然后指定回调函数(主进程负责执行),以便在执行回调函数时,主进程保存I/O进程。任务的结果。

  如果所有任务都在等待主要进程中的所有任务,则结果是均匀处理的,不需要回调函数

  通过nginx部署Django(基于Ubuntu)

  部署Django有很多方法。NGINX+UWSGI的方法是一种更常见的方法。

  这样,我们通常的方法是将NGINX用作服务器的前端,它将接收Web的所有请求并均匀地管理请求。NGINX请求所有静态请求以处理自身(这是NGINX的优势)。

  可以看出,UWSGI的作用类似于桥梁。它扮演了桥梁的角色。

  Linux的强度用于用作服务器,因此我们选择完成以下整个部署过程。

  1.安装nginx

  NGINX是一款轻巧的Web服务器/反向代理服务器和电子邮件(IMAP/POP3)代理服务器,并根据BSD样协议发行。它的特征是拥有较少的内存和强大的并发症。实际上,NGINX的并发能力确实在同一类型的Web服务器中表现良好。

  Nginx也是一家非常受欢迎的Web服务器。在其部署Django的情况下,我们还在这里简要介绍。

  NGINX官方网站:

  打开Ubuntu控制台(CTRL+ALT+T),以使用Ubuntu的仓库安装。

  fnngj@ubuntu:?$ sudo apt-get安装nginx #installation

  启动nginx:

  fnngj@ubuntu:?$ /etc/init.d/nginx开始#startup

  fnngj@ubuntu:?$ /etc/init.d/nginx stop #close

  fnngj@ubuntu:?$ /etc/init.d/nginx restart #restart

  修改nginx的默认端口号,打开/etc/nginx/nginx.conf文件,然后修改端口号。

  复制代码

  服务器 {

  听8088;#修改端口号

  server_name localhost;

  #Charset KOI8-R;

  #access_log logs/host.access.log main;

  地点 / {

  根HTML;

  索引index.html index.htm;

  }

  复制代码

  关于文件36的位置,默认的80端号更改为其他端口号,例如8088。由于其他应用程序很容易占用默认的80 -port号码。

  然后,通过上面的命令重新启动nginx。访问:http // 127.0.0.1:8088/

  如果图片出现在上方,则NGINX启动成功。

  第二,安装UWSGI

  通过PIP安装UWSGI。

  root@ubuntu:/etc#python3 -m pip安装uwsgi

  测试UWSGI并创建一个test.py文件:

  def应用程序(env,start_response):

  start_response('200 ok',[('content-type','text/html')]))))))

  返回[B“ Hello World”]]

  通过UWSGI运行文件。

  fnngj@ubuntu:?/pydj $ uwsgi-http:8001-wsgi-file test.py

  下一个配置Django连接到UWSGI。

  fnngj@ubuntu:?/pydj $ uwsgi-http:8001-chdir/home/fnngj/pydj/myweb/-wsgi-file myweb/wsgi.py-master-master-master-master-master-processers 4-threads 2-stats127.0.0.0.0.0.0.0.0.1:9191919191:919191:919191

  共同选择:

  HTTP:协议类型和端口号

  过程:启动过程的数量

  工人:启动过程的数量等同于流程

  CHDIR:指定操作目录

  WSGI文件:已加载的WSGI文件(load.wsgi文件)

  统计:在指定的地址上,开始状态服务

  线程:运行threads.due to gil的存在,我认为这确实没有用。

  主:允许主进程(启用主过程)

  DAEMONIZE:使该过程在后台运行,并将日志击中指定的日志文件或UDP服务器(DAEMONIZE UWSGI)。实际上,最常用的是在本地文件上输出操作记录。

  PIDFILE:指定PID文件的位置并记录主过程的PID号。

  真空:当服务器退出时,自动清理环境,删除UNIX套接字文件和PID文件(尝试删除所有生成的文件/插座)

  3. nginx+uwsgi+django

  接下来,我们必须结合三个。第一个列表项目的必需文件:

  myweb/

  e- manage.py

  b - ├myweb/

  │_ _- __init__.py

  │e ─—设置.py

  │u - urURLS.PY

  │s-wsgi.py

  b - ─myweb_uwsgi.ini

  当我们通过django创建MyWeb项目时,由sub -directory myweb生成的wsgi.py文件。因此,我们只需要创建myweb_uwsgi.ini配置文件即可。当然,UWSGI支持多种类型的配置文件,例如XML,INI等。

  复制代码

  #myweb_uwsgi.ini文件

  [UWSGI]

  #与Django相关的设置

  插座=:8000

  #基本目录(完整路径)

  chdir =/home/fnngj/pydj/myweb

  #django s wsgi文件

  模块= myweb.wsgi

  #与过程相关的设置

  # 掌握

  主= true

  #最大工程数量

  过程= 4

  #...有适当的权限 - 可能需要

  #chmod-socket = 664

  #出口清除环境

  真空= true

  复制代码

  这种配置实际上等同于上一节中的WSGI命令,以及用一堆参数归档的方法。

  套接字指定项目执行的端口号。

  CHDIR指定项目目录。

  模块myweb.wsgi,您可以这样理解。对于myweb_uwsgi.ini文件,有一个具有级别的myWeb目录。此目录中有一个wsgi.py文件。

  几个参数可以参考上一节中的参数引入。

  接下来,切换到MyWeb项目目录,然后读取myweb_uwsgi.ini文件以通过UWSGI命令启动项目。

  复制代码

  fnngj@ubuntu:?cd/home/fnngj/pydj/myweb/

  fnngj@ubuntu:?/pydj/myweb $ uwsgi -ini myweb_uwsgi.ini

  [uwsgi]从myweb_uwsgi.ini获取INI配置

  ***开始UWSGI 2.0.12(32bit)[星期六3月12日13:05:06 2016] ***

  编译版本:4.8.4,2016年1月26日06:14:41

  操作系统:Linux-3.19.0-25代#26?14.04.1-ubuntu SMP星期五24:18:00 UTC 2015

  Nodename:Ubuntu

  机器:I686

  时钟来源:UNIX

  检测到的CPU核心数:2

  当前的工作目录:/home/fnngj/pydj/myweb

  检测到的二进制路径:/usr/local/bin/uwsgi

  !!!没有Interzal路由支持,可以通过PCRE支持重建!!!

  chdir()to/home/fnngj/pydj/myweb

  您的过程编号限制为15962

  您的内存页面大小为4096字节

  检测到的最大文件描述符编号:1024

  锁发动机:Pthread robust Mutexes

  雷霆锁:禁用(您可以使用锁定锁)启用它)

  UWSGI插座0绑定到TCP地址:8000 FD 3

  Python版本:3.4.3(默认,2015年10月14日,20:37:06)[GCC 4.8.4]

  *** Python线程支持被禁用。您可以使用-nable-threads ***启用它

  Python主解释器在0x8B52DC0初始化

  您的服务器插座收听积压限制为100个连接

  您对工人的优雅运营的怜悯是60秒

  映射4核的319920字节(312 kb)

  ***操作模式:预叉***

  WSGI应用程序0(MountPoint ='')在解释器0x8b52dc0 pid:7158(默认应用程序)上准备就绪。

  *** UWSGI以多解释器模式运行***

  产卵的UWSGI主处理(PID:7158)

  产卵的UWSGI工人1(PID:7160,核心:1)

  产卵的UWSGI工人2(PID:7161,核心:1)

  产卵的UWSGI工人3(PID:7162,核心:1)

  产卵的UWSGI工人4(PID:7163,核心:1)

  复制代码

  注意UWSGI的启动信息。如果有任何错误,请检查是否设置了配置文件的参数。

  我需要做的下一步是修改nginx.conf配置文件。open/etc/nginx/nginx.conf文件并添加以下内容。

  复制代码

  本国的

  服务器 {

  听8099;

  server_name 127.0.0.1

  charset UTF-8;

  access_log/var/log/nginx/myweb_access.log;

  error_log/var/log/nginx/myweb_error.log;

  client_max_body_size 75m;

  地点 / {

  包括uwsgi_params;

  UWSGI_PASS 127.0.0.1:8000;

  uwsgi_read_timeout 2;

  }

  位置 /静态{

  到期30d;

  自动索引;

  add_header缓存控制prive;

  别名/home/fnngj/pydj/myweb/static/;

  }

  }

  本国的

  复制代码

  侦听指定NGINX代理UWSGI的外部端口号。

  server_name Internet上的大多数信息是URL集(例如,wwwexamplecom)。如果我将其设置在此处,则无法访问它,因此指定了指定的默认IP。

  配置后,我有一个问题,我一直在考虑它。nginx如何与UWSGI关联。现在看来,最重要的是这两行配置。

  包括uwsgi_params;

  UWSGI_PASS 127.0.0.1:8000;

  必须指定包含为uwsgi_params;以及uwsgi_pass和myweb_uwsgi.ini配置文件的IP端口。

  现在重新启动nginx并查看上面的nginx的命令。然后,请访问:http // 127.0.0.1:8099/

  通过此IP和端口号的方向,请求首先为nginx。如果您在页面上执行一些请求,则将看到这些请求最终将转移到UWSGI以处理它。

  Python的网络框架

  Django(大型,全面,模板,随附)

  烧瓶(由Pocoo生产,这是一家精品店,带有Jinja2模板,可以更换))))

  web.py(我还没有使用过,作者自杀了,主人是盲目的)

  瓶子(只有一个文件框架,您需要自己构建整个开发系统)

  Uliweb(由中文开发,也很好)

  龙卷风(异步框架,适合长时间连接,例如在线聊天)

  尽管据说Python框架充满了鲜花,但仍然有最大的框架,它是Django.Django的位置,主要称为:

  ①完美的文档,Django的成功,我认为很大一部分原因是归因于Django几乎完美的官方文档(包括Django Book)。

  ②一组完整的解决方案,例如Rails,提供了一套完整的解决方案(包括全堆栈框架 +电池),基本上需要的内容(例如:缓存,会话,feed,feed,orm,auth),以及所有djangocrecocretect由开发网站开发的Django本人基本上为您做了。因此,不必说开发效率很容易找到。它不在Django的源代码中。

  ③功能强大的URL路由配置,Django允许您设计一个非常优雅的URL。在Django中,您基本上可以对丑陋的获取参数说。

  ④自我服务背景,管理界面是对Django更具吸引力的Django。它使您在不编写代码行的情况下具有完整的背景管理界面。

  我与Django一起度过了一个环境,并创建了一个应用程序。

  如果多个请求同时提出,我想测试Django的处理,因此我在View.py中编写了代码:

  Python代码?

  DEF存档(请求):

  打印(“开始”)

  时间。

  打印(“ end”)

  返回httpresponse(“ hellowworld”)

  Django具有自身的效率,并且不使用Epoll/Kqueue。

  很难说有多少人在线。

  测试后,对于我的计算机,最初的Django项目的能力约为294。

  相反,龙卷风是高性能的服务器。其文档的网络示例约为1324。

  一个仅包含“ Hello World!”的静态文件在nginx上,约为2942

  结论:以上是首席CTO注释为每个人编写的Django相关内容的摘要。希望它对您有所帮助!如果您解决了问题,请与更多关心此问题的朋友分享?