feat: LifespanManager.register 支持 priority 参数控制启动顺序#1153
feat: LifespanManager.register 支持 priority 参数控制启动顺序#1153AH-Toby wants to merge 2 commits intofastapi-practices:masterfrom
Conversation
|
我理解这个 PR 想解决的问题,而且这个问题本身我也认同: 不过我这边有个小建议:相比直接给 LifespanManager.register() 增加通用 priority 参数,也许可以考虑 stage + depends_on 这种拆分方式,语义上会更清晰一些 我的理解是,这里的顺序问题其实有两层:
如果这两类问题都统一交给 priority 处理,短期当然能工作,但后面可能会慢慢出现一些维护成本:
所以我个人会更倾向于这样拆:
这样分层之后,职责会更清楚一些:
我感觉这样做有几个好处:
如果这次只是想先解决“核心初始化必须先于插件 lifespan”这个问题,我觉得其实引入一个比较轻量的 stage 就已经足够了; 当然,这只是我个人的一点想法,供参考 |
|
邮件已经收到,谢谢
|
a721d94 to
895ad79
Compare
895ad79 to
5277b73
Compare
|
这次我根据你的建议,把顺序问题拆成了两层处理: 另外这次也补充了几个配套内容: 其他: |
当前 LifespanManager 按注册顺序执行 lifespan,顺序由文件 import 顺序隐式决定。在插件化场景下,插件模块各自注册自己的 lifespan 时,无法显式控制执行顺序,可能导致插件在依赖项(如数据库、Redis)初始化完成之前就开始启动。
改动
为 register 方法新增可选的 priority 参数:
传入 priority 的 lifespan 按数字从小到大优先执行
不传 priority 的 lifespan 保持原有注册顺序,追加在有优先级的之后
使用示例
不传 priority 时行为与改动前完全一致,现有代码无需任何修改。