2017-05-03 19 views
0

Mainthread受信されていない:私はできませんグローバル変数はスレッド間で共有し、MQTTのpython

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:

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

と機能の変化変数を持っているが理由を見つけました。

答えて

0

あなたが持っていないon_message関数では、varはグローバルとしてフラグを付けられます。

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

関連する問題