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

如何处理Django(2023年最新的完成)

时间:2023-03-06 18:00:21 网络应用技术

  简介:今天,首席CTO Note将与您分享如何处理Django的并发内容。如果您可以解决您现在面临的问题,请不要忘记注意此网站。让我们现在开始!

  克莱里(Clery)是基于Python开发的简单,灵活和可靠的分布式任务队列框架。它支持使用任务队列在分布式计算机/流程/线程上执行任务计划。典型的生产者消费者模型主要由三个部分组成:

  例如,系统在系统前批量介绍历史数据,发送文本消息,发送电子邮件和其他时间 - 耗费的任务

  1.安装兔子。在这里,我们将RabbitMQ作为经纪人。安装完成后

  Ubuntu Linux安装

  CentOS Linux安装

  Apple Mac安装需要配置

  配置环境变量(Apple用户)

  启动RabbitMQ服务器

  2.安装克莱里

  3.芹菜在Django项目中使用,Django项目目录结构(简化)如下

  4.创建OA/CLERY.PY主文件

  5.在OA/__ init__.py文件中添加以下内容,以确保Django启动时可以加载此应用程序

  6.每个应用程序都会创建一个任务。Py文件,此处使用/tasks.py。

  7. Views.py引用以使用此任务异步处理

  8.启动克莱里

  9.这样,在调用帖子方法时,可以异步地处理内部的添加

  定时任务的使用方案非常普遍。例如,我需要定期向老板发送报告?

  1. oa/clery.py文件添加以下配置以支持计时任务crontab

  3.首发克莱里·比特(Start Clery Beat),芹菜已经开始了一个节拍过程,该过程一直在不断判断是否有执行的任务

  系统中经常有异步操作。每次触发异步操作时,都会启动一个新线程处理相关的逻辑,并且逻辑集中在I/O密集型类型中;经常出现新的/被摧毁的线程会消耗大量资源;因此,请考虑使用线程使用线程池替换现有逻辑。

  查询信息后,Python拥有可以直接实现线程池功能的ThreadPoolExecutor(明天)。它的使用方式

  请参阅ThreadPoolExecutor

  ThreadPoolExecutor建立的线程池将首先启动多个线程,并让这些线程处于睡眠状态。当提交到线程池的任务时,它将唤醒线程池中的某个睡眠线程,以使其处理此任务。处理此任务后,该线程正在睡觉。RODUCE建立了被破坏的线程池消耗量

  该项目中的实现如下(定义的装饰器)

  总体原则是:应尽可能将CPU密集型任务配置为小,并尝试与CPU的数量相似;IO强度的任务应尽可能地配置为线程,因为IO操作不占用CPU,请勿让CPU空闲,不要让其空闲。应该增加线程的数量。

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

  很难说有多少人在线。

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

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

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

  做一个隐喻。如果A是服务器,则B是客户端,现在您必须在家吃热锅。尽管A说您可以来,但是B认为您必须带上一些东西,所以他去了市场。

  我先去了蔬菜店。b想买一些菠菜,但我担心这个家庭已经可用,所以我打电话给

  B:“我带一些菠菜,对吗?”

  答:“好”

  然后挂断电话。一段时间后,我到达了水上区域

  B:“我带一点虾,对吧?”

  答:“不”

  ...重复了很多之后,突然发现他确实做了一些少的准备,所以一个要求B打电话给B

  答:“我忘了准备蘸酱,你买东西,然后不要先挂断电话”

  Em

  答:“买一瓶葡萄酒”

  Em

  这是Websocket

  Django还应为Websocket提供支持,尽管这似乎不是更好。我们可以通过渠道实现Websocket连接

  上面示例之类的场景是合适的场景

  例如,例如,例如,聊天室,每个人发送的新闻都应实时显示在他人的屏幕上。

  例如,数据监视,波动状态必须在屏幕上实时显示,而不是依靠用户刷新。

  您需要安装频道,asgi_redis,asgiref,channels_redis。后三个可能无法安装,尚不清楚。

  install_apps需要添加“频道”。应该注意的是,这是因为它是一个列表,其顺序有顺序。最好将其添加到第一个。

  在这里,我们的频道通过REDIS实现,必须在settings.py中配置

  这里也有一个小坑。官方文档中的主机不是这种格式,而是“ URI”模式,但是如果您设置了特殊符号('#$%'),如果设置了redis密码,您将发现REDIS的URI可以t直接使用它。在此期间,我尝试了各种方法,但我无法尝试。然后我去了Github打开一个问题。结果,作者说我们是由Aioredis建立联系的。

  然后我找到了这种方式。

  常规WSGI不支持WebSocket,因此您需要配置ASGI

  asgi_application ='Project.Routing.Application'

  像WSGI的配置一样,这是指项目文件夹下的Routing.py文件的应用

  在这里,我建议您使用本官方教程的教程。有更多的悲剧。互联网上有许多渠道使用指南。他们中的大多数都有一个简单的聊天室或其他东西。因为频道在2.0升起后改变了一些方法,这些教程基本上是1.x版本。

  简而言之,首先,StartApp称为聊天。如果我们没有正面和后端分离,则分别有两个html:索引和房间的模板。

  创建一个新的Consuamers.py来编写WebSocket方法

  如上所述,连接和断开连接的含义就像函数名称。因为这是一个聊天室,所以新闻应该分享同一聊天室中的人们。使用ROOM_GROUP_NAME区分其所在的通道。

  接收和chat_message是消息的处理。当用户发送消息时,前端将通过websocket发送消息。Personnel将接收此消息推动,将接收到前端推动,然后在屏幕上显示。

  定义Websocket的地址

  类似于django的URL(cumputers.py与views.py相似),新routing.py是在同一级别上新创建的

  统一使用WS/区分Websocket的连接

  其余的常规页面配置与Django相同

  Views.py:

  urls.py:

  注意:如果网站是http,则连接使用WS,如果是https,则将其修改为WSS

  找到自己留下的信息,我对前端不了解

  如果本地,Runserver很好,但是您仍然必须在线更改“开始”方法以处理高并发。

  传统的UWSGI不支持WebSocket。

  Gunicorn似乎同时支持Websocket,但性能不太好

  在这里我们使用达芙妮

  您需要在此处打开额外的服务,并且负责处理Websocket。

  在入口中

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

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

  Python代码?

  DEF存档(请求):

  打印(“开始”)

  时间。

  打印(“ end”)

  返回httpresponse(“ hellowworld”)

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