首页 > 解决方案 > 如果服务之间存在依赖关系,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系统关闭的情况吗?

标签: pythonnao-robotpepper

解决方案


不,没有“官方”服务关闭顺序,因此即使您的服务按特定顺序关闭,也不能保证它们会在不同的上下文或系统版本中继续这样做。

最好的办法是减少服务之间的依赖关系,尤其是在启动和关闭等关键时刻。所以回答你的问题...

在这种情况下,以独立于 RequestService 的方式实现 LogHandler 可能是一个更好的主意?

...是的,这是一个更好的主意。

我什至不确定您为什么要在不同的服务中使用 requests_service(或者这只是一个示例?)。我有时会做一些提供有用功能的辅助 python 库,并从几个不同的服务中导入同一个库;这样我就可以在没有代码重复的情况下共享功能(虽然你可能有其他原因而不是代码重复想要集中你的请求处理)。


推荐阅读