2017-05-03 3 views
0

Mainthread:variable globale est partagé entre le fil et MQTT recevoir python

client = mqtt.Client() 
client.on_connect = on_connect 
client.on_message = on_message 
client.connect(Broker, 1883, 60) 
client.on_log = on_log 
client.loop_start() 

global alarm 
alarm = True 

while True:   
    try: 
     if alarm == True: 
     ... 

et en fonction ont variable de changement:

def on_message(client, userdata, msg): 
    message = str(msg.payload) 
    if message.lower() == 'alarm off': alarm = False 
    elif message.lower() == 'alarm on': alarm = True 

Il fonctionne comme variable séparée en fonction et Mainthread je ne peux pas trouvé pourquoi.

Répondre

0

La variable var devrait être marquée comme globale dans la fonction on_message et non là où vous l'avez.

client = mqtt.Client() 
client.on_connect = on_connect 
client.on_message = on_message 
client.connect(Broker, 1883, 60) 
client.on_log = on_log 
client.loop_start() 

alarm = True 

while True:   
    try: 
     if alarm == True: 
     ... 

et

def on_message(client, userdata, msg): 
    global alearm 
    message = str(msg.payload) 
    if message.lower() == 'alarm off': alarm = False 
    elif message.lower() == 'alarm on': alarm = True 
+0

Une autre question est-il des autres options pour rendre la variable variable globale car cette façon que définie globale à chaque fois que l'on appelle cette fonction. Juste pour un meilleur code. Merci – Roman

+0

Non, il indique simplement à l'exécution d'utiliser la version globale plutôt que de créer une nouvelle variable locale pour chaque invocation de la fonction 'on_message' – hardillb