适用于 Python 的 AWS IoT MQTT Client - 如何永久订阅



我正在使用samples/basicPubSub/basicPubSub.py中的示例,并带有useWebsocket=True

我有一些文件my_test_file.py我在其中连接((和订阅((与消息回调。假设回调只是写入某个日志文件。我怎样才能让这个文件始终运行,以便如果我从其他地方发布,今天,明天,一年后 - 这个日志文件不断被写入消息?

from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
client = AWSIoTMQTTClient('client_id', useWebsocket=True)
client.configureEndpoint('host', port)
client.configureCredentials('path to cert')
client.configureAutoReconnectBackoffTime(1, 32, 20)
client.configureOfflinePublishQueueing(-1)
client.configureDrainingFrequency(2)
client.configureConnectDisconnectTimeout(10)
client.configureMQTTOperationTimeout(5)
client.connect()
client.subscribe('topic name', 1, _some_callback_func)
while True:
    time.sleep(1)

my_test_file.py结束时进行无限while循环是唯一的方法吗?使用无限 while 循环,我运行文件,这是一个阻塞过程,但它是无限订阅的。它是 systemd 服务和这个无限 while 循环的组合吗?我在 Paho MQTT 客户端中看到了一些loop_forever()方法,aws iot mqtt 客户端是否有类似的东西?loop_forever(( 只是实现无限 while 循环吗?

无限循环是处理这个问题的正确方法,只要你知道该怎么做,而不是中断主进程(核心逻辑(。为此,我建议您将此脚本隔离在一个新的 python 文件中,由主 python 脚本作为子进程运行。因此,在开始动手之前,请阅读多处理 - 基于进程的并行性。

通常总是需要保持Python进程在内存上运行,除非某些东西意外重新启动操作系统。

这似乎不是一种优雅的处理方式,但我建议您在此 Python 脚本背后构建一个执行管理结构,例如始终在"引导加载程序"机器/设备之后启动您的 python 脚本,制作另一个看门狗脚本或其他类似的东西,以防止一些互联网连接问题,强制系统重新启动或重新连接到互联网。

最新更新