python - 如果服务之间存在依赖关系,NaoQ 将以什么顺序终止服务?
问题描述
例如,我有一个RequestService
负责发出请求并LogHandler
加载了/home/nao/naoqi/preferences/autoload.ini
. 的想法LogHandler
是处理所有日志(在LogManager
服务的帮助下)并使用此日志向远程服务器发出请求。此外,LogHandler
当系统启动和系统关闭时处理事件。为了处理关闭,我使用了在app.run()
方法之后触发的逻辑(我使用了这个想法)。
问题是:如果LogHandler
依赖于RequestService
,是否有任何保证操作系统会先杀死LogHandler
然后RequestService
或者有杀死的风险RequestService
- 在这种情况下,LogHandler
将无法向远程服务器发送请求。在这种情况下LogHandler
,以独立于RequestService
?
# init of the LogHandler
app = qi.Application(url=ROBOT_URL)
app.start()
session = app.session
request_service = session.service("request_service")
on_os_start(request_service)
...
app.run()
...
on_os_shutdown(request_service)
app.stop()
我可以依靠request_service
系统关闭的情况吗?
解决方案
不,没有“官方”服务关闭顺序,因此即使您的服务按特定顺序关闭,也不能保证它们会在不同的上下文或系统版本中继续这样做。
最好的办法是减少服务之间的依赖关系,尤其是在启动和关闭等关键时刻。所以回答你的问题...
在这种情况下,以独立于 RequestService 的方式实现 LogHandler 可能是一个更好的主意?
...是的,这是一个更好的主意。
我什至不确定您为什么要在不同的服务中使用 requests_service(或者这只是一个示例?)。我有时会做一些提供有用功能的辅助 python 库,并从几个不同的服务中导入同一个库;这样我就可以在没有代码重复的情况下共享功能(虽然你可能有其他原因而不是代码重复想要集中你的请求处理)。
推荐阅读
- python - Pandas 将函数应用于列表中的多个列
- google-cloud-platform - 从 GKEPodOperator 返回一个 python 对象
- validation - Terraform 变量验证 Terraform v0.13 与长度和 Substr
- java - 如何在java中添加和合并同一地图的值
- javascript - Javascript,来自 Promise 上的 API emtpy 结果
- python - 如何删除 Django 应用程序中的所有迁移文件
- javascript - 来自 Firebase 身份验证的密码提示和配置文件
- ios - 单击并显示标注时添加注释,标注消失
- ios - 为什么 FadeInImage 会在图像 url 错误时阻止网络请求
- django - 无法在 Django 中运行 Celery 任务 - 我得到“AppRegistryNotReady:应用程序尚未加载”或“RuntimeError:populate() 不可重入”