适用于Python的AWS IoT MQTT客户端 - 您如何永久订阅?

时间:2017-11-17 18:43:49

标签: infinite-loop mqtt publish-subscribe aws-iot

我正在使用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循环吗?

1 个答案:

答案 0 :(得分:0)

无限循环是处理它的正确方法,只要你知道该做什么,而不是打断主进程(核心逻辑)。为此,我建议您将此脚本隔离在一个新的python文件中,由主python脚本作为子进程运行。因此,在开始之前,请先阅读Multiprocessing - process-based parallelism

通常情况下总是需要保持Python进程在内存上运行,除非有意外地重启操作系统。

它似乎不是一个优雅的方式来处理它,但我建议你在这个Python脚本后面构建一个执行管理结构,就像在#34; boot loader"之后总是启动你的python脚本一样。机器/设备,制作另一个看门狗脚本或类似的东西,以防止一些互联网连接问题,迫使系统重新启动或重新连接到互联网。