首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在MQTT客户端中持续运行代码部分的解决方案?

在MQTT客户端中持续运行代码部分的解决方案?
EN

Stack Overflow用户
提问于 2019-01-04 05:01:18
回答 1查看 1.5K关注 0票数 0

我正在尝试通过mqtt连接发送一封邮件,然后对收件箱中收集的收到邮件执行一项任务。问题是,当我运行代码时,消息还没有收到,代码中处理消息中信息的部分不会再次运行。

我考虑过对该位使用while True:循环,但这样就根本无法访问mqtt脚本了。这不起作用。

这可能是一个非常基本的问题,但是我如何实现连续运行mqtt客户端并在以后的某个时候处理收集到的消息呢?

代码语言:javascript
复制
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的答案相关):

代码语言:javascript
复制
# 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()
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54029745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档