2017-09-07 5 views
0

メッセージを送受信しているPaho MQTT Pythonサービスを実装したいと思います。いずれかのインスタンスでエラーが発生した場合は、再起動する必要があります。複数のPaho MQTTクライアントをサービス/デーモンとして実行する方法

私は、それぞれがpahoのloop_start()でスレッドネットワークループを開始する2つのクラスを実装しました。これらのクラスには、他のクラスなどを呼び出すコールバック関数がいくつかあります。今の

私はクラスを呼び出し、ループシンプルなPythonスクリプトがあります。

from one import one 
from two import two 

import time 

one() 
two() 

while True: 
    if one.is_alive(): 
     print("one is still alive") 
    else: 
     print("one died - do something!") 
    time.sleep(1) 

そして、ここに私のクラス「1」:しかし

import paho.mqtt.client as mqtt 
import json 

class one(): 
    def __init__(self): 

     self.__client = mqtt.Client(client_id = "one") 
     self.__client.connect("localhost", 1883) 
     self.__client.subscribe("one") 
     self.__client.on_connect = self.__on_connect 
     self.__client.on_message = self.__on_message 
     self.__client.on_disconnect = self.__on_disconnect 
     self.__client.loop_start() 

    def __on_connect(self, client, userdata, flags, rc): 
     print("one: on_connect") 

    def __on_disconnect(self, client, userdata, flags, rc): 
     print("one: on_disconnect") 

    def __on_message(self, client, userdata, message): 

     str_message = message.payload.decode('utf-8') 
     message = json.loads(str_message) 
     print("one: on_message: " + str(message)) 

    def is_alive(self): 
     return True 

を - 私が作成したパッケージを送信する場合エラー(例えば、jsonではなく節約メッセージ)の "is_alive"関数はTrueを返していますが、paho実装はもはや応答しません。したがって、それ以上のメッセージはon_messageに送信されません。クラスの一部だけが依然として反応的です! クラス "two"はまだ応答しており、スクリプトは "while true"のままです。

どうすればそのようなクラスの機能を適切にチェックできますか?

+0

[サービスとしてPythonスクリプトを実行する方法](https://stackoverflow.com/questions/16420092/how-to-make-python-script-run-as-service) – LeopoldVonBuschLight

答えて

0

class1.isAlive()のようなチェッカーメソッドをビルドする必要があると思います。このクラスは、クラスがリクエストのためのwaitngであるかどうかを示します。また、私はwhile Trueループでこれを構築し、失敗よりも反応しなければならないと思います。

さらに、待機機能を使用して独自のイベントを作成することもできます。 CPUが空いているのを待っていますが、応答がより速いです。たとえば、hereを参照してください。しかし、あなたのpythonのバージョンに依存します。

+0

私はしようとしましたそのようなチェッカーの機能を追加するが、私はちょうどそれを正しい方法をshureしていない - 私はそれに応じて自分の投稿を編集しました。 – hamso

関連する問題