Python Paho MQTT 全局变量未存储消息

Python Paho MQTT Global Variable not Storing Message

使用paho mqtt,在函数中声明了全局变量,但是想在函数外调用变量时却不起作用。 (on_message 函数之外的最后一行打印函数)。它每 1 秒发布一次消息,但是执行此操作时,没有消息显示。

import paho.mqtt.client as mqtt
from datetime import datetime

message = ''
def on_connect (client, userdata, flags, rc):  
    print('Connected successful with attempt: {}'.format(str(rc)))
    client.subscribe('imax123')

def on_message (client, userdata, msg): 
    global message
    message = str(msg.payload)

client = mqtt.Client('IMAXCLIENT') 
client.on_connect = on_connect 
client.on_message = on_message 
client.connect('mqtt.eclipseprojects.io') 
client.loop_forever()

print(message)

正如@Brits 在评论中指出的那样,代码永远不会通过 client.loop_forever() 调用。

此调用将在 MQTT 客户端的生命周期内阻塞。

你如何前进将在很大程度上取决于你需要实现的目标。如果您只想接收一条消息,那么有一个 helper 包装器可以做到这一点

import paho.mqtt.subscribe as subscribe

msg = subscribe.simple("paho/test/simple", hostname="mqtt.eclipse.org")
print("%s %s" % (msg.topic, msg.payload))

如果您需要做更多,那么您可能需要考虑将 client.loop_forever() 换成 client.loop_start(),这将启动后台线程到 运行 客户端网络循环。即使进行了此更改,您的代码仍然需要做更多的工作,因为 message 全局在消息到达之前不会更新,这可能需要很长时间,因此尝试立即打印它可能不会提供您期望的结果。