改了一行代码,runserver 是怎么知道的?是全盘监听吗?改模板要不要重启?这篇启动真实的 runserver,改文件、计时、数进程,把重载的边界摸清。
Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). You have 2 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): contenttypes. Run 'python manage.py migrate' to apply them. September 30, 2026 - 07:06:21 Django version 6.1.1, using settings 'proj.settings' Starting WSGI development server at http://127.0.0.1:9330/ Quit the server with CONTROL-C.
本机没有安装 pywatchman,所以用的是 StatReloader:定期检查已知文件的修改时间。(装了 watchman 后是否自动换用没有测。)
改视图模块 lab/views.py 生效用时(s):[0.23, 0.76, 0.8];期间新增的进程数:[1, 1, 1]
重载器发现被监视的文件变化后,让子进程退出、由父进程拉起新的子进程——所以每次改动进程 id 都变、ready() 重新执行(第 14 篇)。
改模板 templates/page.html(每次先请求一次让它进缓存)生效用时(s): [0.06, 0.53, 0.53] 期间读到旧内容的次数: [2, 18, 19] 新增进程: [0, 0, 0] 改「没有被任何模块导入」的 lab/other.py 后 3 s 内新增进程 0 个 改 notes.txt 后 3 s 内新增进程 0 个
被监视的是「已导入模块的文件 + 注册的额外路径(如模板目录)」。改一个没有被导入的 .py 或一个文本文件,不会有反应。改模板时 Django 只重置模板加载器的缓存。