2017-11-17 4 views
0

私はメッセージ・コールバックで)私が接続して()と(購読いくつかのファイルmy_test_file.pyを持っているuseWebsocket=TrueAWS IoT Python用MQTTクライアント - 永久にどのように購読しますか?

でサンプル/ basicPubSub/basicPubSub.pyからの例を使用しています。コールバックが単にいくつかのログファイルに書き込むとしましょう。どうすればこのファイルを常に稼働させることができますか。今日、明日、今から1年後に他の場所からパブリッシュすると、このログファイルには常にメッセージが書き込まれますか?

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サービスとこの無限ループの組み合わせですか?私はPaho MQTTクライアントでいくつかのloop_forever()メソッドを見ましたが、aws iot mqttクライアントは何か類似していますか? loop_forever()はwhileループを無限に実装していますか?

+0

あなたのコードを投稿してください。 – hardillb

答えて

0

あなたが何をすべきかを知っていれば、メインプロセス(コアロジック)を中断しない限り、無限ループがそれを扱う正しい方法です。これを行うには、メインPythonスクリプトがサブプロセスとして実行する新しいPythonファイルでこのスクリプトを分離することをお勧めします。だから、手で始める前に、Multiprocessing - process-based parallelismと読んでください。

何かが予期せずOSを再起動しない限り、通常は何かがいつもPythonプロセスをメモリ上で実行し続ける必要があります。

これは扱いが面倒ではないようですが、このPythonスクリプトの背後にある実行管理構造を構築することをお勧めします。 "boot loader" machine/deviceの後にPythonスクリプトを起動し、スクリプトなどを使用してインターネット接続の問題を防ぎ、システムを再起動したり、インターネットに再接続したりすることができます。

関連する問題