python - fastAPI 管理具有后台任务的工作人员
问题描述
我正在使用具有一些特殊性的 FastAPI 后端...让我首先解释一下该应用程序的通常工作流程:
- 用户介绍要跟踪的系统的 IP。
- 后端接收它并创建一个对象(类的实例),该对象在 FastAPI BackgroundTasks 中启动一个循环(典型的运行方法),以将数据定期存储在数据库中。
- 当用户想要停止跟踪该系统时,只需单击“停止”。所以后端完成了那个循环,BackgroundTasks 结束了。
由于它应该是一个小型应用程序,因此存储在 pythons 全局字典中的对象如下所示:
{
"X.X.X.X": new Handler (a new instance of the class),
"Y.Y.Y.Y": new Handler,
...
}
我可以很容易地抓住物体来控制它们。
问题是我正在跟踪更多的系统并且系统开始变慢。所以我决定使用workers
uvicorn 的选项来看看我是否可以解决这个问题(例如,有 4 个进程和 6 个线程)。但是,当 Uvicorn 启动 num_workers newmultiprocessing.Process
并且请求由其中一个响应时,您可能在全局 dict 中找不到对象(毕竟进程不是线程......)。
所以我尝试使用 multiprocessing.managers.SyncManager 并“创建”一种缓存。但是,当我尝试存储对象实例时,它说cannot pickle '_thread.lock' object。我不太确定是否不能做我想做的事或什么......(在多个工作人员之间共享 python 对象)
我也尝试了 aiocache 我正在创建缓存的新实例,所以也没有工作。
我也尝试过使用 guvicorn 和--preload
cmd 选项,但结果相同......
我不知道是否可以使用中间件进行某种路由,因此我可以搜索哪个进程在其字典中具有所需的 IP 对象或类似的东西......
总之,我在征求意见......我该如何处理这个问题?
PD:很抱歉这么长的文字!
谢谢!!
解决方案
推荐阅读
- ios - 无法将类型“x”的值转换为预期的参数类型“[String:Any]”
- jquery - 我可以在 Jquery 中添加多个 LocalStorages
- r - 估计边际均值,仅控制一个 IV 水平的影响(emmeans,lmer)
- r - 带有滑块的 R Shiny 应用程序未选择指定范围内的所有值
- c++ - C++定义构造函数使对象非POD
- php - laravel 应用程序中 paypal 中的 504 服务不可用错误
- spring - 如何排除 gradle 依赖项
- java - Selenium 点击了错误的链接
- azure-data-factory - 不使用源代码控制的多用户 Azure 数据工厂开发
- python - TypeError in_io.BytesIO 与 Python3