我在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
这看起来不对吗?如何让脚本在执行第二部分之前发送消息?在
TCP堆栈是异步的。当您要求发送数据时,并不意味着它会立即发出。代码后面有一个事件循环。如果您想按顺序执行某些操作,则必须将连续任务分解为单独的函数,并在消息真正发出时在下一个
on_publish()
上调用它们。在我可以用图书馆发信息:
并使用:
^{pr2}$它将遵循脚本的自然流程并仍然发送消息。在
这是按预期工作的。在
网络循环是一个已经在处理传入消息的线程。发布将排队,直到
on_message
函数完成,然后网络循环将处理这些排队的发布相关问题 更多 >
编程相关推荐