django5生产级部署和并发测试(开发者服务器和uvicorn服务器)

目录

    • 1. 创建django项目
    • 2. 安装压力测试工具
    • 3. 安装生产级服务器uvicorn
    • 4. 多进程部署

1. 创建django项目

在桌面创建一个名为django_test的项目:

django-admin startproject django_test

然后使用cd命令进入django_test文件夹内,使用开发者服务器运行项目:

 python manage.py runserver

启动后,使用浏览器访问http://127.0.0.1:8000/,效果如下:
在这里插入图片描述

2. 安装压力测试工具

本次使用ApacheBench压力测试工具,用于测试http服务器请求的性能情况(下载链接,提取码:768b )。

解压后进入Apache24中的bin文件夹内,运行下述命令:

 ./ab.exe -n100 -c50 http://127.0.0.1:8000/

上述命令表示模拟50个并发,每个并发发送100个访问请求。

对于django的开发者服务器来说,测试效果如下:

Requests per second:    26.42 [#/sec] (mean)
Time per request:       1892.848 [ms] (mean)
Time per request:       37.857 [ms] (mean, across all concurrent requests)
Transfer rate:          281.54 [Kbytes/sec] received

其中,每秒可以处理的请求数为26.42,这并不是一个很高的值,下面使用一个生产级服务器用于部署django。

3. 安装生产级服务器uvicorn

uvicorn 是基于 uvloop 和 httptools 构建的非常快速的 ASGI 服务器,下面使用它来部署django程序。

首先安装uvicorn

pip install uvicorn

然后使用下面的命令启动django:

python -m uvicorn django_test.asgi:application

然后再按照第2部分内容使用压力测试工具对其进行压力测试,效果如下:

Requests per second:    143.65 [#/sec] (mean)
Time per request:       348.058 [ms] (mean)
Time per request:       6.961 [ms] (mean, across all concurrent requests)

可以看到,每秒可以处理的请求数为143.65,比使用开发者服务器快了将近6倍。

4. 多进程部署

前面使用uvicorn将django项目进行了生产级部署,显著提高了访问效率。但是这种部署只使用了一个进程,在最终部署时可以根据服务器核数部署多进程服务,命令如下:

python -m uvicorn django_test.asgi:application --workers 2

这里的参数–workers表示进程数,上述命令使用2个进程进行服务。

再按照第2部分内容使用压力测试工具对其进行压力测试,效果如下:

Requests per second:    214.66 [#/sec] (mean)
Time per request:       232.923 [ms] (mean)
Time per request:       4.658 [ms] (mean, across all concurrent requests)

可以看到,每秒可以处理的请求数为214.66,比单进程快了很多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/513058.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android开发必须会的技能,Github上最值得学习的10个Android开源项目

学会深入思考,总结沉淀 我想说的第一条就是要学会深入思考,总结沉淀,这是我觉得最重要也是最有意义的一件事。 ‌先来说深入思考。在程序员这个圈子里,常能听到一些言论:我这个工作一点技术含量都没有,每…

Python学习 day07(JSON、format()函数)

JSON 各种编程语言存储数据的容器不尽相同,在Python中有字典dict这样的数据类型,而其他语言可能没有对应的字典,为了让不同的语言都能够相互通用的传递数据,JSON就是一种非常良好的中转数据格式,如下: JSON…

为什么有了HTTP协议,还要有WebSocket协议?

文章目录 使HTTP不断轮询长轮询WebSocket是什么?怎么建立WebSocket连接WebSocket抓包WebSocket的消息格式WebSocket的使用场景总结 平时我们打开网页,比如购物网站某宝。都是点一下列表商品,跳转一下网页就到了商品详情。 从HTTP协议的角度来…

wait() 、notify()、notifyAll() 的详细用法

文章目录 💐wait() 讲解💐notify() 讲解💐notifyAll()💡wait() 和 sleep() 的区别 首先,我们知道,线程的执行顺序是随机的(操作系统随机调度的,抢占式执行),但是有时候,我…

详解C#之WinForm版利用RichTextBox 制作文本编辑器【附源码】

在Windows应用程序开发中,刚刚介绍了WPF版的利用RichTextBox实现文本编辑器,今天继续推出WinForm版的利用RichTextBox实现文本编辑器。本文利用一个简单的小例子,简述如何在WinForm开发中,利用RichTextBox开发文本编辑器&#xff…

day04-SpringBootWeb入门

一、SpringBootWeb快速入门 1 需求 需求:基于 SpringBoot 的方式开发一个 web 应用,浏览器发起请求 /hello后,给浏览器返回字符串“Hello World ~”。 2 开发步骤 第1步:创建 SpringBoot 工程项目 第2步:定义 HelloC…

Nodejs 第四十六章(redis持久化)

redis持久化 Redis提供两种持久化方式: RDB(Redis Database)持久化:RDB是一种快照的形式,它会将内存中的数据定期保存到磁盘上。可以通过配置Redis服务器,设置自动触发RDB快照的条件,比如在指…

低代码与数字经济:推动软件开发创新的新引擎

随着数字经济的飞速发展,传统的软件开发方式已经难以满足快速变化的市场需求。在这一背景下,低代码开发平台应运而生,以其高效、灵活的特性,成为推动数字经济创新发展的重要力量。本文将探讨低代码与数字经济的关系,分…

在 Flutter 中使用 flutter_gen 简化图像资产管理

你是否厌倦了在 Flutter 项目中手动管理图像资产的繁琐任务? 告别手工输入资源路径的痛苦,欢迎使用“Flutter Gen”高效资源管理的时代。在本文中,我将带您从手动处理图像资源的挫折到动态生成它们的便利。 选择1:痛苦手动添加–…

自动化测试环境搭建--Linux内网环境【实操经验】

环境信息 Python版本3.6.8 Jenkins版本2.346.3 Allure版本 2.13.2 环境准备 一、Python需要安装库 allure-pytest (2.13.2) pytest (7.0.1) jsonpath (0.82.2) pytest-html (3.2.0) pytest-ordering (0.6) …

Pytorch学习 day03(Tensorboard、Transforms)

Tensorboard Tensorboard能够可视化loss的变化过程,便于我们查看模型的训练状态,也能查看模型当前的输入和输出结果 在Pycharm中,可以通过按住ctrl,并左键点击某个库来进入源文件查看该库的使用方法SummaryWriter是用来向log_dir…

USB - Linux Kernel Menuconfig

Linux kernel,make menuconfig,和USB相关的,在主菜单选择Device Drivers。 Device Drivers下面,找到USB support。 在USB support下面,就可以对USB相关的item进行设置。 按照从上到下的顺序,打开的设置依次…