上一节讲到任务执行单元Worker主要维护了一个Blueprint对象,Worker的启动主要就是启动Blueprint对象,这一节我们来详细看下Blueprint.
首先,还是先看下时序流程图:
结合时序图进行分析:
1.在Worker调用setup_instance时会构造Blueprint,这个Blueprint是个内部类,里面定义了其default_steps.
1 | class Blueprint(bootsteps.Blueprint): |
在Blueprint的构造函数里,主要代码就是构造自己的steps,如果构造函数传递了steps参数就用参数,否则就用default_steps.
Worker在构造时没有传递steps,因此就是用的default_steps.
2.构造完Blueprint后,调用其apply方法。apply方法主要完成2个工作:
a.调用_finalize_steps分析各个step间的依赖关系并构造出一个有向无环的图。然后根据依赖关系构造各个step.
b.然后调用step的include方法,这个方法是判断step是否需要包含进app对象中,默认是包含。如果step不需要包含进app,需要自已实现include_if方法。
如果step要包含进app,则会调用step的create方法,这个方法主要用于不同的step创建自己所需要的特定对象,这个对象在后面启动step时还会调用其start方法。
3.启动Worker时调用Blueprint的start方法,然后依次调用step的start方法。
step如果自己实现了start方法则调用自己的实现,否则默认实现就是调用2.b中创建的对象的start方法。
这样就分析了Worker是如何通过Blueprint启动自已的。
作者:self-motivation
来源:CSDN
原文:https://blog.csdn.net/happyAnger6/article/details/53890071
版权声明:本文为博主原创文章,转载请附上博文链接!