源代码阅读时,最好能够了解项目的运行流程,从整体上感知运行的过程,方便对项目进行分解,逐步学习。通过文章[运行Gunicorn源码][1]的介绍,并结合pdb进行逐步调试, 很容易的获得Gunicorn的整体运行过程,如下图:
spawn_worker()方法中, 会通过查看配置,来生成指定类型的工作者进程,如:
worker = self.worker_class(self.worker_age, self.pid, self.LISTENERS, self.app, self.timeout / 2.0, self.cfg, self.log)
这里的worker_class是可以通过参数指定的.
worker创建好以后, 会调用workers/base.py中Worker类的init_process()方法
在Worker.init_process()中, 会完成对工作者进程的准备工作, 如:加载配置、初始化信号量等。然后调用Workder.run()方法来启动工作者进程。
由于Gunicorn支持多种工作者进程, 每种工作者进程的运行过程不同, 所以Workder.run()会由子类去实现, 这里用到了模板设计模式。
本文来自网易实践者社区,经作者王一兵授权发布。