【发布时间】:2019-01-03 21:01:17
【问题描述】:
我正在尝试通过 mqtt 连接向我发送一条消息,然后对收件箱中收集的收到的消息执行一项任务。问题是当我运行代码时,消息还没有被接收到,代码中对消息中的信息起作用的部分没有再次运行。
我曾考虑为该位使用while True: 循环,但随后根本无法访问 mqtt 脚本。这不起作用。
这可能是一个非常基础的问题,但是我怎样才能实现连续运行 mqtt 客户端并在稍后的某个时间处理收集到的消息呢?
import paho.mqtt.client as client
hostname = 'test.mosquitto.org'
topic = "personal/topic"
# receiving the data
inbox = []
def on_message(client, userdata, msg):
msg = msg.payload.decode()
inbox.append(msg)
print("Received Message No. %s: %s" % (len(inbox), msg))
def on_connect(client, userdata, flags, rc):
print("Connection returned result: " + str(rc))
client.subscribe(topic)
# this is where I want to perform a task on the message
y = []
X = []
for msg in inbox:
label, data = msg.split(': ')
data = data.split(', ')
y.append(label)
X.append(data)
# the mqtt part
client = client.Client()
client.on_message = on_message
client.on_connect = on_connect
client.connect(hostname)
client.loop_forever()
这是在脚本末尾使用client.loop_start()的构造(与@hardillb 的回答有关):
# the mqtt part
client = client.Client()
client.on_message = on_message
client.on_connect = on_connect
client.connect(hostname)
client.loop_start()
while True:
y = []
X = []
for msg in inbox:
label, data = msg.split(': ')
data = data.split(', ')
y.append(label)
X.append(data)
client.disconnect()
client.loop_stop()
【问题讨论】:
-
您发布的代码没有问题,它按预期工作。请编辑问题以添加有关您希望它做什么的更多详细信息。
-
@hardillb 我将该部分添加到代码中,我想在其中处理收到的消息。但是
y和X始终保持空白 -
我想我会将消息放在
Queue对象中,然后让另一个线程尝试get来自Queue的项目,只要Queue中没有项目,get阻塞线程 -
@user8408080 到目前为止我还没有真正研究过线程,但我现在可能会考虑这样做......谢谢
标签: python python-3.x mqtt paho