Клиент AWS IoT MQTT для Python — как подписаться навсегда?

Я использую пример из 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)

Является ли бесконечный цикл while в конце my_test_file.py единственным способом? С бесконечным циклом while я запускаю файл, и это блокирующий процесс, но он бесконечно подписан. Это комбинация сервиса systemd и бесконечного цикла while? Я видел несколько методов loop_forever() в клиенте Paho MQTT, есть ли что-то подобное в клиенте aws iot mqtt? Является ли loop_forever() просто бесконечным циклом while?


person user1087973    schedule 17.11.2017    source источник
comment
Опубликуйте больше своего кода.   -  person hardillb    schedule 17.11.2017


Ответы (1)


Бесконечный цикл — правильный способ справиться с этим, если вы знаете, что делать, не прерывая основной процесс (основную логику). Для этого я рекомендую изолировать этот скрипт в новом файле Python, который будет запускаться основным скриптом Python в качестве подпроцесса. Итак, прежде чем приступить к работе, прочитайте Многопроцессорность — параллелизм на основе процессов .

Обычно что-то всегда нужно, чтобы процесс Python работал в памяти, если только что-то неожиданно не перезагрузит ОС.

Это кажется не элегантным способом справиться с этим, но я советую вам построить структуру управления выполнением за этим скриптом Python, например, всегда инициировать ваш скрипт python после машины/устройства «загрузчика», создать еще один сторожевой скрипт или что-то в этом роде. в противном случае, чтобы предотвратить некоторые проблемы с подключением к Интернету, заставляя систему перезагружаться или повторно подключаться к Интернету.

person rfschroeder    schedule 24.01.2018