2017-09-07 3 views
0

항상 실행 중이며 메시지를 보내고 보내는 Paho MQTT Python 서비스를 구현하고 싶습니다. 인스턴스에 오류가 발생하면 다시 시작해야합니다.여러 Paho MQTT 클라이언트를 서비스/데몬으로 실행하는 방법

각 클래스는 paho의 loop_start()를 사용하여 스레드 된 네트워크 루프를 시작하는 두 개의 클래스를 구현했습니다. 그런 다음이 클래스에는 다른 클래스를 호출하는 콜백 함수가 있습니다. 지금은

은 내가 클래스를 호출하고 루프 간단한 파이썬 스크립트가 : 여기

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) 

그리고 내 클래스 "하나"그러나

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 대신 절임 된 메시지) my "is_alive"-function은 True를 반환하지만 파 호 구현은 더 이상 응답하지 않습니다. 따라서 더 이상의 메시지는 on_message로 전송되지 않습니다. 그래서 수업의 일부분 만 여전히 반응합니다!? 클래스 "2"는 여전히 응답하며 스크립트는 "while true"로 실행됩니다.

클래스의 기능을 올바르게 확인하려면 어떻게해야합니까?

+0

[서비스로 실행되는 Python 스크립트 작성 방법] (https://stackoverflow.com/questions/16420092/how-to-make-python-script-run-as-service) – LeopoldVonBuschLight

답변

0

나는 당신이 요청을위한 waitng인지 알려주는 class1.isAlive() 같은 검사기 메소드를 만들어야한다고 생각한다. 또한 나는 당신이 while True 루프에서 이것을 구축하고 실패보다 반응해야한다고 생각합니다.

또한 대기 기능을 사용하여 나만의 이벤트를 작성할 수 있습니다. CPU 사용이 많을 때까지 기다리지만 반응이 좋습니다. 예를 들어 here을 참조하십시오. 하지만 그것은 파이썬 버전에 달려 있습니다.

+0

시도했습니다. 그런 체커 기능을 추가하지만, 나는 정확히 어떻게 du에 맞을 슈가 아니에요 - 나는 그에 따라 내 게시물을 편집했습니다. – hamso