django如何实现高并发(Django快速开发实战)

导读:今天首席CTO笔记来给各位分享关于django如何实现高并发的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

python高并发web框架有哪些

python的web框架很多

django (大而全,模板,orm都自带)

flask (pocoo出品,比属精品,自带jinja2模板,可以替换)

web.py (这个我没用过,作者自杀,白瞎了一个高手)

bottle (只有一个文件的框架,需要自己构建整个开发体系)

uliweb (中国人开发的,也很不错)

Tornado (异步框架,适合长连接,比如在线聊天之类的)

Python框架虽然说是百花齐放,但仍然有那么一家是最大的,它就是Django。Django为人所称道的地方主要有:

①完美的文档,Django的成功,我觉得很大一部分原因要归功于Django近乎完美的官方文档(包括Django book)。

②全套的解决方案,Django象Rails一样,提供全套的解决方案(full-stack framework + batteries included),基本要什么有什么(比如:cache、session、feed、orm、geo、auth),而且全部Django自己造,开发网 站应手的工具Django基本都给你做好了,因此开发效率是不用说的,出了问题也算好找,不在你的代码里就在Django的源码里。

③强大的URL路由配置,Django让你可以设计出非常优雅的URL,在Django里你基本可以跟丑陋的GET参数说拜拜。

④自助管理后台,admin interface是Django里比较吸引眼球的一项contrib,让你几乎不用写一行代码就拥有一个完整的后台管理界面。

django如何实现高并发(Django快速开发实战)  第1张

django websocket

做个比喻, 如果说A是服务端, B是客户端, 现在要在A家里吃火锅, 虽然A说你人来就行, 但是B心想总得带点东西过去, 于是去了市场.

先到了蔬菜店, B想买点菠菜, 但又怕A家里已经有了, 于是给A打电话

B: "我带点菠菜过去吧?"

A: "好"

然后挂断. 过一会儿到了水产区

B: "我带点虾过去吧?"

A: "不用"

...如此反复多了之后A突然发现自己确实少准备了一些东西, 于是A给主动给B打了电话

A: "我忘准备蘸料了, 你买点, 然后先别挂掉"

...

A: "再买瓶酒"

...

这就是websocket了

django当让也提供对websocket的支持, 虽然这似乎不是他更擅长的东西. 我们可以通过channels实现websocket连接

诸如上述例子的场景都是合适的场景

举例来说的话比如聊天室, 每个人发送的消息都要实时显示在别人的屏幕上.

比如说数据监控, 波动状态也要实时的呈现在屏幕上, 而不是依赖于使用者自己刷新.

需要安装 channels , asgi_redis , asgiref , channels_redis . 后三个未必都需要装, 记不太清了, 总之安装过程都在channels的使用文档上.

INSTALL_APPS 中需要加上 "channels" , 需要注意的是因为这是一个list, 是有先后顺序的, 最好把它加在第一个.

这里我们的channel通过redis实现, 要在 settings.py 中配置

这里还有点小坑, 官方文档里的hosts不是这种格式, 是 "uri" 这种模式, 但是如果你在设置redis密码时机智的设置了特殊符号( '#$%' 这种), 你就会发现redis的 uri 直接就用不了了, 期间尝试各种方法, 转义什么的也试了都不行, 然后去github上开了个issue, 结果作者说我们是通过 aioredis 连接的, 你去找他们的文档吧....

然后就找到了这种方式.

常规的WSGI不支持websocket, 所以还需要配置ASGI

ASGI_APPLICATION = 'project.routing.application'

同wsgi的配置一样, 这是指向 project 文件夹下 routing.py 文件的 application

这里建议大家跟这官方教程的Tutorial走一遍. 有个比较悲剧的地方就是网上可以搜到许多channels使用指南, 大多都是搭个简易聊天室什么的, 然而你用起来可能发现存在各种报错, 因为channels升了2.0之后更改了一些方法, 而那些教程里基本全都是1.x的版本.

简单说下, 首先 startapp 叫 chat , 假如这里我们没有进行前后端分离, 里面有 templates , 两个 html : index 和 room 分别对应首页和某一个聊天室

新建 consumers.py 来写 websocket 方法

如上, connect 和 disconnect 含义分别如函数名. 因为是聊天室, 所以同一个聊天室内的人应该消息共享, 用 room_group_name 来区分所在的频道.

receive 和 chat_message 是对消息的处理. 当一个用户发送消息时, 前端把消息通过websocket发送过来, receive 收到消息提取关键内容, 通过 chat_message 发送给组内的所有连接. 这时保持连接的所有组内人员都会收到这条消息推送, 前端收到推送再显示在屏幕上.

定义websocket的地址

类似于 django 的 url ( consumers.py 就类似于 views.py ), 同级新建 routing.py

统一用ws/来区分websocket的连接

剩下常规的页面配置和django一样

views.py :

urls.py :

注意: 如果网站是http, 连接使用ws, 如果是https要修改成wss

剩下的自己找资料吧, 笔者对前端了解的不多

本地的话 runserver 就好了, 但是在线上还是得更改启动方式应对高并发.

传统的 uwsgi 不支持 websocket .

gunicorn 好像可以同时支持 websocket , 但是性能不太ok

这里我们用 daphne

这里需要额外开个服务, 专门负责处理websocket.

ingress中要配置路由跳转

python可以干什么

1、Web开发:结合python、html、css、javascript、数据库等开发一个网站。

2、数据科学

数据科学,包括了机器学习,数据分析和数据可视化。

将Python用于机器学习:可以研究人工智能、机器人、语言识别、图像识别、自然语言处理和专家系统等

将Python用于数据分析/可视化:大数据分析等等

3、网络爬虫

网络爬虫又称网络蜘蛛,是指按照某种规则在网络上爬取所需内容的脚本程序。众所周知,每个网页通常包含其他网页的入口,网络爬虫则通过一个网址依次进入其他网址获取所需内容。

在爬虫领域,Python是必不可少的一部分。将网络一切数据作为资源,通过自动化程序进行有针对性的数据采集以及处理。

4、自动化运维

随着技术的进步、业务需求的快速增长,一个运维人员通常要管理上百、上千台服务器,运维工作也变的重复、繁杂。把运维工作自动化,能够把运维人员从服务器的管理中解放出来,让运维工作变得简单、快速、准确。

5、嵌入式应用开发

6、游戏开发

7、桌面应用开发

Django本身提供了runserver,为什么不用来部署

      Django本身自带了runserver,但是我们只是在测试的时候,会用到它,而在真正的生产部署一般都会使用uwsgi+nginx方式。

       因为我们的生产环境一般都会有很大的并发访问量,而django自带的runserver非常不稳定,最大连接数大约在几十个,过多的并发连接,导致服务崩溃,而且安全性上也不好。

       而nginx可以支持高并发连接,官方给出最大连接数在50000个左右,实际生产中,大约也在20000~40000个左右,内存消耗少,稳定性高,支持热部署(可以在不间断服务的情况下,进行版本升级)。

      相对比较而言,Django自带的runserver,只适合我们在测试的时候使用。

大家都用 Python 来做什么啊?

Python通俗易懂、容易入门、功能强大,除了极少的领域之外,Python几乎无所不能:

1. Web开发

最火的Python web框架Django,支持异步高并发的Tornado框架,短小精悍的flask,bottle,Django官方的标语把Django定义为the framework for perfectionist with deadlines(大意是一个为完全主义者开发的高效率web框架)

2. 网络编程

支持高并发的Twisted网络框架,py3引入的asyncio使异步编程变的非常简单

3. 爬虫开发

爬虫领域,Python几乎是霸主地位,Scrapy/Request/BeautifuSoap/urllib等,想爬啥就爬啥

4. 云计算开发

目前最火最知名的云计算框架就是OpenStack,Python现在的火,很大一部分就是因为云计算市场近几年的爆发

5. 人工智能

MASA和Google早期大量使用Python,为什么Python积累了丰富的科学运算库,当AI时代来临后,Python从众多编程语言中脱颖而出,各种人工智能算法都基于Python编写,由其PyTorch之后,Python作为AI时代头牌语言的位置基本确立!

6. 自动化运维

问问中国的每个运维人员,运维人员必须会的语言是什么?10个人详细会给你一个相同的答案,它的名字叫Python

7. 金融分析

金融公司使用的很多分析程序、高频交易软件就是用的Python,目前,Python是金融分析、量化交易领域里用的最多的语言

8. 科学运算

97年开始,NASA就在大量使用Python在进行各种复杂的科学运算,随着NumPy,SciPy,Matplotlib,Enthought librarys等众多程序库的开发,使得Python越来越适合做科学计算、绘制高质量的2D和3D图像。和科学计算领域最流行的商业软件Matlab相比,Python是一门通用的程序设计语言,比Matlab所采用的脚本语言的应用范围更广泛

9. 游戏开发

在网络游戏开发中Python也有很多应用。相比Lua or C++,Python比Lua有更高阶的抽象能力,可以用更少的代码描述游戏业务逻辑,与Lua相比,Python更适合作为一种Host语言,即程序的入口点是在Python那一端会比较好,然后用C/C++在非常必要的时候写一些扩展。Python非常适合编写1万行以上的项目,而且能够很好的把网游项目的规模控制在10万行代码以内。

10. 桌面软件

虽然大家很少使用桌面软件了,但是Python在图形界面开发上也很强大,你可以用tkinter/PyQT框架开发各种桌面软件!

结语:以上就是首席CTO笔记为大家介绍的关于django如何实现高并发的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。

以上内容为新媒号(sinv.com.cn)为大家提供!新媒号,坚持更新大家所需的互联网后端知识。希望您喜欢!

版权申明:新媒号所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请发送邮件至 k2#88.com(替换@) 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023-09-23 13:08
下一篇 2023-09-23 13:08

相关推荐

发表回复

登录后才能评论