MQTT с Python, застрял в цикле - PullRequest
       63

MQTT с Python, застрял в цикле

0 голосов
/ 29 сентября 2019

У меня есть два файла Python main.py и helper.py.

Я хочу, чтобы мой main.py работал всегда, а код выглядит как

terminal_state = False
state = initialState #env.reset()

if __name__ == "__main__":
    while True:
        print('State: ', state)
        state_encod = np.reshape(state, [1, state_size])
        q_values = model.predict(state_encod)
        action_key = np.argmax(q_values)
        action = index_to_action_mapping[action_key]
        next_state, reward, terminal_state = env.step(state, action)
        state = deepcopy(next_stat

метод env.step, которыйВызывается из другого файла (вспомогательный файл). код вспомогательного файла

class Env():
    def __init__():
    #some initializations

    def step(self,state,action):
        #somecalculations
        state_not_constructed = 1
        print('Waiting for 30 sec')
        time.sleep(30)
        print('after sleep')

        def on_connect(client, userdata, flags, rc):
            if rc==0:
                print("connected OK Returned code=",rc)
            else:
                print("Bad connection Returned code=",rc)
            client.subscribe('ULHI/data/B2L3')

        def on_message(client, userdata, message):
            global state_not_constructed
            state_not_constructed = 0
            client.loop_stop()
            print('after loop stop')
            print(str(state_not_constructed))

        def construct_state(): 
            global client
            ### mqtt connection
            broker_address = "105.221.205.212"
            port = 7505
            client = mqtt.Client(clean_session=True) #create new instance
            print("connecting to broker")
            client.loop_start()
            client.connect(broker_address, port)
            client.on_connect = on_connect
            client.on_message = on_message #attach function to callback

        construct_state()
        i = 0
        while state_not_constructed == 1:
           print('in while loop')

        print('state constructed')

что я должен сделать отступ, я жду, пока я получу сообщение от брокера mqtt, поэтому я добавил цикл while, как только я получаю сообщение, пока цикл должен быть брокероми остальная часть кода должна быть выполнена.

Но я не уверен, где я ошибаюсь, потому что я застрял в цикле while и не вышел. Может ли кто-нибудь помочь мне с тем, где я иду не так?

Спасибо.

...