首页>>后端>>Python->django怎么多线程隔离(2023年最新整理)

django怎么多线程隔离(2023年最新整理)

时间:2023-12-11 本站 点击:0

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

django 使用全局线程池

系统里面有频繁的异步操作,每次触发异步操作就会开始一个新的线程处理相关逻辑,逻辑集中在I/O密集型;频繁的新建/销毁线程,消耗大量资源;由此,考虑使用线程池替换现有逻辑。

经过查询资料,python有ThreadPoolExecutor( tomorrow )可以直接实现线程池的相关功能,它的使用方式

具体使用方法见 ThreadPoolExecutor

ThreadPoolExecutor建立的线程池会先启动若干数量的线程,并让这些线程都处于睡眠状态,当向线程池submit一个任务后,会唤醒线程池中的某一个睡眠线程,让它来处理这个任务,当处理完这个任务,线程又处于睡眠状态。减少了建立销毁线程池消耗

在本项目里面的实现如下(定义的装饰器)

总体的原则是: CPU密集型任务应配置尽可能小的线程,尽量跟CPU的个数相近;IO密集型任务应配置尽可能多的线程,因为IO操作不占用CPU,不要让CPU闲下来,应加大线程数量。推荐的公式:

django 多线程 + uWSGI 多线程 遇到的坑

当django中使用了多线程时,由于uwsgi默认不开启多线程,所以我们需要为uwsgi手动开启多线程。

闲言少叙,直接上配置。

在uwsgi 的配准文件 uwsgi.ini 中 增加下面的 threads 字段

这样就可开启多线程。

django部署的一个爬虫服务。客户端发送一个请求后,django立即开启一个线程,去执行耗时的爬虫任务, django不等待爬虫结果,便先返回给客户端“请等待”的提示,在爬虫任务执行完毕后,再通过轮询或websocket返回给客户端爬虫任务的结果。

使用 django的 runserver 运行项目没问题,但当使用 nginx+ uwsgi 运行项目时,爬虫的HTTP请求不返回结果;当使用 uwsgi单独拉起项目时,爬虫的HTTP返回结果但速度奇慢。

最后发现是uwsgi 默认不支持多线程,需要开启多线程(方法如上),即可解决问题。

django admin实现后台多用户隔离

很多人说django自带的后台只能用来做管理,其实简单的多用户发布需求还是可以用自带的admin模块来做的。核心是使用 request.user 获取当前登录用户,然后根据用户筛选后台显示内容。

复杂的用户权限管理使用django-guardian等组件

模拟了一个根据用户每天输入的数据,生成可视化报表的项目。预想的是根据不同的报表类型,预设不同的数据模板。前端请求的时候发送报表类型和数据范围用户等信息到后端。后端返回数据后交给前端echart处理。

花了整个下午才完成基本的后台,因为目的是实现多用户,后面的部分有空再去写。

![HTZMQ)4(7BXHAD`K~F]QSLR.png]( )

创建和修改model时,会显示关联的外键的所有的值,比如显示出所有的用户来了。使用 get_form 方法隐藏外键字段(例如user), save_model 设置user默认值,也别忘了列表页的筛选 get_queryset

结语:以上就是首席CTO笔记为大家整理的关于django怎么多线程隔离的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~


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