用Python在MQTT中响应

2024-06-06 14:15:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我在mqttpython(v2.7)脚本中遇到了一点延迟问题,这让我想知道。。。在

所以我有一个设备向另一个设备请求一个函数。我们叫他们A和B

因此,A发送一个MQTT消息来执行某个操作,而B执行该功能。我有一个普通的发布方式。这里没有问题。在

B获取已发布的消息:

def on_message(client, userdata, msg):
    if msg.topic == "action":
            >> then do something here <<

这里似乎也没有什么问题。它获取消息并执行操作。在

当我试图报告它的进展时,问题就出现了,看起来像这样:

^{pr2}$

问题不在于它不做动作也不做动作,而是它似乎两者都会做,而是以一种非常奇怪的顺序,比如:

action
action
(several seconds wait)
message1
message2

这看起来不对吗?如何让脚本在执行第二部分之前发送消息?在


Tags: 函数功能脚本client消息messageondef
3条回答

TCP堆栈是异步的。当您要求发送数据时,并不意味着它会立即发出。代码后面有一个事件循环。如果您想按顺序执行某些操作,则必须将连续任务分解为单独的函数,并在消息真正发出时在下一个on_publish()上调用它们。在

我可以用图书馆发信息:

import paho.mqtt.publish as mqttc

并使用:

^{pr2}$

它将遵循脚本的自然流程并仍然发送消息。在

这是按预期工作的。在

网络循环是一个已经在处理传入消息的线程。发布将排队,直到on_message函数完成,然后网络循环将处理这些排队的发布

相关问题 更多 >