我正在使用samples / basicPubSub / basicPubSub.py中的示例useWebsocket=True
我有一些文件my_test_file.py
,其中我连接()和subscribe()与消息回调。假设回调只是写入一些日志文件。如何让这个文件始终运行,这样如果我从其他地方发布,今天,明天,一年后发布 - 这个日志文件会不断被写入消息?
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循环,我运行该文件并且它是一个阻塞过程,但它是无限订阅的。它是系统服务和这个无限循环的组合吗?我在Paho MQTT客户端看到了一些loop_forever()
方法,是不是mqtt客户端有类似的东西? loop_forever()只是实现了一个无限的while循环吗?
答案 0 :(得分:0)
无限循环是处理它的正确方法,只要你知道该做什么,而不是打断主进程(核心逻辑)。为此,我建议您将此脚本隔离在一个新的python文件中,由主python脚本作为子进程运行。因此,在开始之前,请先阅读Multiprocessing - process-based parallelism。
通常情况下总是需要保持Python进程在内存上运行,除非有意外地重启操作系统。
它似乎不是一个优雅的方式来处理它,但我建议你在这个Python脚本后面构建一个执行管理结构,就像在#34; boot loader"之后总是启动你的python脚本一样。机器/设备,制作另一个看门狗脚本或类似的东西,以防止一些互联网连接问题,迫使系统重新启动或重新连接到互联网。