fastapi重载导致的问题

问题背景

在测试服务器部署 Aggregation Services时,使用 fastapi 的重载功能来更新代码,相当于重新部署。但是,在增加新功能时,重载导致了新的 bug,(项目实际用途为测试内部使用,各种各样原因导致维护和部署的局限性,所以使用这个方式进行部署)

Aggregation Services 项目中有一个公共类负责存储其他系统的 token , 然而,,fastapi 的重载模块会创建一个监控进程,该进程会重新加载代码(即使该类已使用线程单例模式或进程锁单例模式)。这导致获取 token 的接口被重复请求,而这些 token 是使用单点登录模式获取的,最终致使项目中的 token 无法正常使用。

解决方案

  1. 禁用重载功能:(最佳解决方案)
    • 优点:解决了上述问题,并且不需要对其他类似功能进行线程或进程锁单例处理。
    • 缺点:调试效率明显降低。
  2. 使用外部存储
    • 将 token 存储到 Redis 进行持久化存储。
    • 未解决的问题:虽然这种方法可以解决当前功能的问题,但是其他类或方法使用这种方式时则无法解决。
  3. 引入消息队列
    • 使用消息队列来异步处理 token 的获取和更新,确保只有一个进程或者线程在进行 token 的获取和更新操作。
    • 尚未尝试:这种方法虽然复杂,但可能是一个可行的解决方案。

补充说明

在生产环境中,尽量不要使用重载。尽管在学习fastapi的过程中曾看到过类似的警告,但在没有真正遇到问题并找到原因之前,很难真正理解并听取这样的建议。只有在真正遇到问题并找到原因后,才会深刻理解这种警告的重要性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值