django有什么进程(django的工作原理)
今天首席CTO笔记来给各位分享关于django有什么进程的相关内容,其中也会对django的源码工作原理进行详细介绍,如果能碰巧解决你现在面临的源码问题,别忘了关注本站,源码现在开始吧!源码本文目录一览:1、源码php问卷调查源码Django源码阅读(一)项目的源码生成与启动2、supervisor拉起Django为什么会多出一个进程3、源码django一个请求对应一个进程4、源码Django与supervisor管理进程Django源码阅读(一)项目的源码生成与启动诚实的说,直到目前为止,源码我并不欣赏django。源码在我的源码认知它并不是多么精巧的设计。只是源码由功能堆积起来的"成熟方案"。但每一样东西的源码崛起都是时代的选择。无论你多么不喜欢,但它被需要。希望有一天,python能有更多更丰富的成熟方案,且不再被诟病性能和可维护性。(屁话结束)
取其精华去其糟粕,django的优点是方便,我们这次源码阅读的目的是探究其方便的本质。计划上本次源码阅读不会精细到每一处,而是大体以功能为单位进行解读。
django-adminstartprojectHelloWorld即可生成django项目,TVmovie影视源码命令行是exe格式的。
manage.py把参数交给命令行解析。
execute_from_command_line()通过命令行参数,创建一个管理类。然后运行他的execute()。
如果设置了reload,将会在启动前先check_errors。
check_errors()是个闭包,所以上文结尾是(django.setup)()。
直接看最后一句settings.INSTALLED_APPS。从settings中抓取app
注意,这个settings还不是我们项目中的settings.py。而是一个对象,位于django\conf\__init__.py
这是个Settings类的懒加载封装类,直到__getattr__取值时才开始初始化。然后从Settings类的实例中取值。且会讲该值赋值到自己的__dict__上(下次会直接在自己身上找到,因为__getattr__优先级较低)
为了方便debug,我们直接写个run.py。不用命令行的方式。
项目下建个run.py,模拟runserver命令
debug抓一下setting_module
回到setup()中的最后一句apps.populate(settings.INSTALLED_APPS)
开始看apps.populate()
首先看这段
这些App最后都会封装成为AppConfig。且会装载到self.app_configs字典中
随后,分别调用每个appConfig的import_models()和ready()方法。
App的网站类目源码装载部分大体如此
为了方便debug我们改写下最后一句
res的类型是Commanddjango.contrib.staticfiles.management.commands.runserver.Commandobjectat0xEDA0
重点是第二句,让我们跳到run_from_argv()方法,这里对参数进行了若干处理。
用pycharm点这里的handle会进入基类的方法,无法得到正确的走向。实际上子类Commond重写了这个方法。
这里分为两种情况,如果是reload重载时,会直接执行inner_run(),而项目启动需要先执行其他逻辑。
django项目启动时,实际上会启动两次,如果我们在项目入口(manage.py)中设置个print,会发现它会打印两次。
第一次启动时,DJANGO_AUTORELOAD_ENV为None,无法进入启动逻辑。会进入restart_with_reloader()。
在这里会将DJANGO_AUTORELOAD_ENV置为True,随后重启。
第二次时,可以进入启动逻辑了。
这里创建了一个django主线程,将inner_run()传入。
随后本线程通过reloader.run(django_main_thread),创建一个轮询守护进程。源码包如何
我们接下来看django的主线程inner_run()。
当我们看到wsgi时,django负责的启动逻辑,就此结束了。接下来的工作交由wsgi服务器了
这相当于我们之前在fastapi中说到的,将fastapi的app交由asgi服务器。(asgi也是django提出来的,两者本质同源)
那么这个wsgi是从哪来的?让我们来稍微回溯下
这个settings是一个对象,在之前的操作中已经从settings.py配置文件中获得了自身的属性。所以我们只需要去settings.py配置文件中寻找。
我们来寻找这个get_wsgi_application()。
它会再次调用setup(),重要的是,返回一个WSGIHandler类的实例。
这就是wsgiapp本身。
load_middleware()为构建中间件堆栈,这也是wsgiapp获取setting信息的唯一途径。导入settings.py,生成中间件堆栈。
如果看过我之前那篇fastapi源码的,应该对中间件堆栈不陌生。
app入口→中间件堆栈→路由→路由节点→endpoint
所以,wsgiapp就此构建完毕,服务器传入请求至app入口,即可经过中间件到达路由进行分发。贷款 源码 红色
supervisor拉起Django为什么会多出一个进程
知道是是Django自己reload的原因了,我在supervisor中给Django加了--noreload后,就不会有两个进程了。但这样,Django就不能自动载入修改的文件。
django一个请求对应一个进程uwsgi部署方式下,一个请求会进一个进程,但一个进程同时"接待"的不止一个请求。
Django与supervisor管理进程在Django项目中,我们需要用到一些独立于Django框架外的脚本。这样一些脚本可能需要独立的持续运行,且具有很强的可维护性,这个时候supervisor就可以排上用场了。
直接使用pip进行
使用supervisor很简单,只需要修改一些配置文件,就可以使用了。
运行
即可看到默认配置情况,但是一般情况下,我们都不要去修改默认的配置,而是将默认配置重定向到另外的文件中,不同的进程运用不同的配置文件去对默认文件进行复写即可。
默认配置说明
配置文件都有说明,且很简单,就不做多的描述了,在上面有一些建议修改的目录,若做了修改,则应先创建这些文件,需要注意权限问题,很多错误都是没有权限造成的。
现在,让我们来启动supervisor服务。
查看supervisord是否运行:
上面我们已经把supervisrod运行起来了,现在可以添加我们要管理的进程的配置文件。可以把所有配置项都写到supervisord.conf文件里,但并不推荐这样做,而是通过include的方式把不同的程序(组)写到不同的配置文件里,对,就是默认配置中的最后的那个include。下面来对项目进行简单的配置。
假设我们把项目配置文件放在这个目录中:/etc/supervisor/
则我们需要修改/etc/supervisord.conf中的include为:
测试py文件:
以下为配置文件目录/etc/supervisor/test.conf:
配置完成以后,即可运行:
查看运行状态
打开浏览器,输入.0.0.,输入用户名与密码(如果配置文件中inet_/new/download.html 下载宝塔安装文件,按照提示完成安装。确保服务器环境为Linux CentOS,安装PHP扩展fileinfo和redis。域名解析应指向服务器IP。
准备前端环境:安装HBuilder X 3.7.6和微信开发者工具。Node.js版本需更新至v..0以上。
下载并安装源码:从码云下载源码至api目录,解压后上传至服务器。通过浏览器访问安装页面,按照提示填写协议、数据库信息,并检查安装。安装完成后,删除安装目录,使用管理员密码登录后台。
配置定时任务:为自动处理超时订单,需在supervisor管理器中设置定时任务,以确保ThinkPHP的crontab定时运行。
小程序编译:使用HBuilderX打开uniapp文件夹,配置微信小程序AppID和接口地址。确保uniCloud文件夹在运行时可用。
App编译设置:为uni-app应用设置标识和图标。配置云函数、云空间关联,完成后可发行并发布到App Store或Google Play。
基础配置检查:仔细设置存储引擎、支付参数、小程序和uniapp配置。确保所有配置正确无误,以保证盲盒商城系统正常运行。
HomeAssistant supervisor 通过hacs安装midea ac lan 下载太慢怎么解决
如果您在使用HomeAssistant supervisor通过HACS安装Midea AC LAN时遇到下载速度缓慢的问题,可以尝试以下步骤来解决。首先,访问codeload.github.com/geo...找到对应的Midea AC LAN的源代码包。下载完成后,将其上传至HomeAssistant的自定义组件目录,即/usr/share/hassio/homeassistant/custom_components/。接着,解压缩下载的文件以便于系统识别。确保操作完成后,重启Home Assistant以刷新配置。最后,登录到Home Assistant的配置界面,找到左侧的"设备与服务"选项,点击"添加集成",在搜索框中输入"Midea AC LAN",找到并安装相关插件。这样,通常可以解决下载和安装过程中的速度问题。如果问题依然存在,可能需要检查网络连接或者尝试更换更快速的下载源。
最新彩虹易支付搭建系统网站源码免签约
搭建最新彩虹易支付系统网站源码,无需签约。本文提供一套集成个人微信、支付宝收款功能的方案,支持三网免挂,实现轮值收款与设置收款限额。云端源码免挂,使用体验接近个人码支付。请仔细阅读以下步骤安装:
1、配置系统环境。推荐使用Linux系统 CentOS 7.6,安装Nginx 1..1、MySQL 5.6.、PHP7.2、Redis(通过php-安装扩展-找到redis安装)。
2、创建二级域名站点,上传后端源码至Public目录,设置伪静态为Thinkphp。
3、通过ssh或宝塔终端登录服务器,执行以下命令:sudo rpm -Uvh packages.microsoft.com/...,安装完成后输入sudo yum install dotnet-sdk-3.1,根据提示输入y回车。
4、访问测试网址:/linux/centos/docker-ce.repo
2)安装docker-ce
yuminstalldocker-ce
3)启动并加入开机启动
systemctlstartdocker.servicesystemctlenabledocker.service
linuxsupervisor作用?
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。
supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。
守护线程的作用?
守护线程以及其作用
通常来说,守护线程经常被用来执行一些后台任务,但是呢,你又希望在程序退出时,或者说JVM退出时,线程能够自动关闭,此时,守护线程是你的首选。
“只要当前JVM实例中尚存任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束是,守护线程随着JVM一同结束工作,Daemon作用是为其他线程提供便利服务,守护线程最典型的应用就是GC(垃圾回收器),他就是一个很称职的守护者。”
2024-11-19 12:20
2024-11-19 11:48
2024-11-19 11:38
2024-11-19 10:45
2024-11-19 10:32