将守护进程与 REST 相结合 API
Combining a daemon with a REST API
我正在开发一个可以在容器中 运行 的守护进程,它会持续抓取实时数据并将其提供给 redis 以供其他方使用,我一直打算附加一个 REST API 这将提供有关 redis 连接状态的信息,并允许指示守护进程发布到其他 redis 实例。
在获得基本的 API 运行 python 模块 falcon 之后,我意识到这个守护进程现在需要同时做两件事,所以我会需要使用多个线程,或者其他一些异步机制。
这提出了两个问题:
1) 这种将连续守护程序和 REST API 相结合的结构是常见的还是明智的决定?能够以基于网络的方式与守护进程交互,允许更强大的集成测试等对我来说似乎很有价值,但也许这是矫枉过正,而且麻烦多于它的价值?我想另一种方法是通过配置文件对其进行配置,并根据输出数据监控其运行状况。
2) 如果我要继续这个选择,那么实现双重行为、线程或异步的最明智的框架选择是什么?也许没有太大区别,但我很想听听一两个建议。
非常感谢,
克赞.
- 1) 我认为异步 REST API 对于您想要获得的行为是有意义的,类似于 POST/PUT 用于 publishing/inserting/starting 分析和 GET 用于检索状态和其他信息可能是一个不错的决定,对于某些替代方法,请查看 gRPC,但我不确定是否对您的情况有用。
- 2) 主要区别在于:通常 asyncio 在 "hardware" 级别而不是线程库使用的 "application" 级别性能更高;出于同样的原因,线程为您提供 "more controll" 线程,而不是为您管理一些高级细节的 asyncio。
我的句子可能有些过度简化,我建议您阅读这些文章:https://medium.com/@nhumrich/asynchronous-python-45df84b82434, https://medium.com/analytics-vidhya/asyncio-threading-and-multiprocessing-in-python-4f5ff6ca75e8, https://towardsdatascience.com/a-better-way-for-asynchronous-programming-asyncio-over-multi-threading-3457d82b3295 并阅读这两个库的所有文档,以便更好地理解各种用例。
我正在开发一个可以在容器中 运行 的守护进程,它会持续抓取实时数据并将其提供给 redis 以供其他方使用,我一直打算附加一个 REST API 这将提供有关 redis 连接状态的信息,并允许指示守护进程发布到其他 redis 实例。
在获得基本的 API 运行 python 模块 falcon 之后,我意识到这个守护进程现在需要同时做两件事,所以我会需要使用多个线程,或者其他一些异步机制。
这提出了两个问题:
1) 这种将连续守护程序和 REST API 相结合的结构是常见的还是明智的决定?能够以基于网络的方式与守护进程交互,允许更强大的集成测试等对我来说似乎很有价值,但也许这是矫枉过正,而且麻烦多于它的价值?我想另一种方法是通过配置文件对其进行配置,并根据输出数据监控其运行状况。
2) 如果我要继续这个选择,那么实现双重行为、线程或异步的最明智的框架选择是什么?也许没有太大区别,但我很想听听一两个建议。
非常感谢, 克赞.
- 1) 我认为异步 REST API 对于您想要获得的行为是有意义的,类似于 POST/PUT 用于 publishing/inserting/starting 分析和 GET 用于检索状态和其他信息可能是一个不错的决定,对于某些替代方法,请查看 gRPC,但我不确定是否对您的情况有用。
- 2) 主要区别在于:通常 asyncio 在 "hardware" 级别而不是线程库使用的 "application" 级别性能更高;出于同样的原因,线程为您提供 "more controll" 线程,而不是为您管理一些高级细节的 asyncio。 我的句子可能有些过度简化,我建议您阅读这些文章:https://medium.com/@nhumrich/asynchronous-python-45df84b82434, https://medium.com/analytics-vidhya/asyncio-threading-and-multiprocessing-in-python-4f5ff6ca75e8, https://towardsdatascience.com/a-better-way-for-asynchronous-programming-asyncio-over-multi-threading-3457d82b3295 并阅读这两个库的所有文档,以便更好地理解各种用例。