目录
启动
# 启动命令:
python manage.py runserver
# 运行先文件的handler函数
django\core\management\commands\runserver.py
先绑定一些参数最后,执行实例的run方法,user_reloader可以在启动命令时添加,让代码修改服务不重启。
aotureload模块负责控制线程的启动与重启任务
进入到main中运行python_reloader函数,
若环境变量没有设置(正常情况下不会设置),进入到restart_with_reloader中:
修改代码时会自动重启在原因在这个函数中,subprocess.call命令启动了一个子进程,autoreload模块中有线程启动监控文件改变情况,若改变则杀死子进程。
args是启动命令参数列表,new_environ添加了"RUN_MAIN"参数,使子进程会进入到python_reloader(上一个函数)的if os.environ.get(“RUN_MAIN”) == “true”:中。
在inner_run中处理请求类和运行启动函数
run函数中就是WSGI的server_forever函数了
server_forver函数中就是select循环,这里注意,本地调试时候使用的是select循环不是poll和epoll(以后整理一篇三者的区别)
到这Django本地正常运行起来了。通过select监控端口请求,交给Django的handler处理请求。