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



使用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客户端的整个生命周期内阻塞。

你如何前进在很大程度上取决于你需要实现什么。如果你只想接收一条消息,那么有一个助手包装器可以完成

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全局设置在消息到达之前不会更新,这可能需要很长时间,因此尝试立即打印可能无法达到预期效果。

相关内容

  • 没有找到相关文章

最新更新