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