0%

APIStar - WERKZEUG(run_simple) 源码阅读笔记

上个月研究 APIStar 源码, 发现启动 python app.py run 用的是 werkzeug 的 run_simple 方法, 仔细读了一下, 感触颇深, 用这篇日志分享一下整个执行流程.

大致流程:

(ps. 最好和下边的图一起看.)

  1. APIStar 入口:
    python app.py runrun_wsgi()werkzeug.run_simple()
  2. werkzeug.run_simple() - apistar/commands/run.py:26: 因为默认启用了 reloader(自动重启 server), 这时会去 检查 WERKZ_RUN_MAIN 这个环境变量:
    • 第一次为'':
      • Step 1: 设置该环境变量为true
      • Step 2: 在 while 循环中启动一个 子进程 , 并运行 入口命令(python app.py run)
    • 第二次为true:
      • Step 1: srv.serve_forever():
        用一个 thread 启动一个 server 去处理 request - werkzeug/serving.py:702
      • Step 2: reloader.run():
        用 while 循环每隔一秒去检查所有 iter_module_files 和 self.extra_files, 比较每个文件的修改时间, 如果有更新的话 → sys.exist(3) → 结束 子进程, 重新运行入口命令(python app.py run) (回到外边的 while loop 中.)

总结

哎, 努力写了一堆文字, 但感觉还是无法解释的很清楚, 可以看上图中 左下角有个 Summary, 是简化版的逻辑.. 会比较清晰一些.
下次还是用画图工具, 将解释和流程图融合在一起, 效果应该会好很多.


说画就画, 但感觉死循环还是画的不够直观呀: