2017-05-03 89 views
0

Mainthread:全局變量不是線程和MQTT收到蟒蛇之間共享

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: 
     ... 

和在功能上有變化而變化:

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

它就像獨立的變量在功能和Mainthread我不能找到原因。

回答

0

該var應該在on_message函數中標記爲全局而不是您擁有它的位置。

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: 
     ... 

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

還有一個問題是它的一些其他選項每次都使全球變化,因爲這種方式設置變量爲全局在調用此函數時。只是爲了更好看的代碼。謝謝 – Roman

+0

不,它只是告訴運行時使用全局版本,而不是爲'on_message'函數的每次調用創建一個新的局部變量 – hardillb