结合 loop_start()、loop_stop() 和 loop_forever();启动单独的应用程序

Combining loop_start(), loop_stop(), and loop_forever(); launching the separate application

使用client.loop_start()是否正确,做一些事情,然后client.loop_stop(),最后client.loop_forever()

上下文: 我的 Raspberry 设备上有一个 bootloader.py。引导加载程序将在设备启动时自动启动。引导加载程序连接到应用程序服务器(通过专用 IP 和主题),检查设备上安装的预期软件,如果本地不可用则下载更新的软件,启动所需的应用程序,然后引导加载程序应成为一个订阅者来监听到来自外部的“服务消息”。 (例如:“将您的状态发送给我”、“检查是否有新软件,如果有新软件,请下载并重启设备”。

当前实现: 我已经实现了加载过程并启动了所需的应用程序。该实现使用 client.loop_start()(即使用分离线程处理通信)。下载所需文件后,引导程序调用subprocess.Popen(cmd),成为启动应用程序的进程。

我想要的是:现在我想分离启动应用程序的进程。引导加载程序应该成为一个 永远 监听的客户端。我的想法是 client.loops_stop() 与应用服务器的通信完成后,启动应用程序,然后 client.loop_forever() 作为脚本的最后一个动作,让它永远监听。这样的做法对吗?

描述的情况是否正常?这是一个众所周知的模式吗?如果是的话,你能指点我相关的文档吗?如果不是,您能看出该方法有什么缺陷吗?

这不是我在其他地方看到的真正模式,但如果它满足您的需求。

唯一的问题是如果调用 loop_stop()loop_forever() 之间的时间长于 Keep Alive 周期,这将导致代理断开客户端。

重新启动事件循环时,您可能还会收到大量消息。