2017-11-17 21 views
0

는 내가 메시지 콜백() 연결() 및 구독 어디 일부 파일 my_test_file.pyuseWebsocket=TrueAWS IoT Python 용 MQTT 클라이언트 - 영원히 어떻게 구독하나요?

와 함께 샘플/basicPubSub/basicPubSub.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 루프를 구현하고 있습니까?

+0

더 많은 코드를 게시하십시오. – hardillb

답변

0

주 프로세스 (코어 로직)를 방해하지 않고 무언가를 처리하면 무언가 루핑을 처리하는 것이 올바른 방법입니다. 그렇게하기 위해서, 메인 파이썬 스크립트에 의해 서브 프로세스로 실행될 새로운 파이썬 파일에서이 스크립트를 분리하는 것이 좋습니다. 따라서 손으로 시작하기 전에 Multiprocessing - process-based parallelism을 읽으십시오.

뭔가 예기치 않게 OS를 재부팅하지 않으면 일반적으로 항상 파이썬 프로세스를 메모리에서 실행해야합니다.

세련된 처리 방법이 아닌 것 같지만, "부트 로더"machine/device 다음에 항상 파이썬 스크립트를 시작하고 다른 워치 독을 작성하는 것처럼이 Python 스크립트 뒤에 실행 관리 구조를 구성하는 것이 좋습니다. 스크립트 또는 일부 다른 인터넷 연결 문제를 방지하기 위해 시스템을 재부팅하거나 인터넷에 다시 연결해야합니다.