[英]Responding in MQTT with Python
我的MQTT Python(v2.7)脚本中有一些延迟问题,这让我感到纳闷...
所以我有一台设备向另一台设备请求功能。 我们称它们为A和B。
因此,A发出MQTT消息以执行某项操作,而B则执行该功能。 我有A通过正常的发布方法发送出去。 这里没有问题。
B收到带有以下部分的已发布消息:
def on_message(client, userdata, msg):
if msg.topic == "action":
>> then do something here <<
在这里似乎也没有问题。 它获取消息并执行操作。
当我尝试报告运行情况时,问题就出现在这里,如下所示:
def on_message(client, userdata, msg):
if msg.topic == "action":
>> then do something here <<
client.publish("report", payload=message1, qos=2, retain=False)
>> then do some more action here <<
client.publish("report", payload=message2, qos=2, retain=False)
问题不在于它既不执行该操作也不执行该操作,而是看起来它可以同时执行这两个操作,而是以一种非常奇怪的顺序进行,例如:
action
action
(several seconds wait)
message1
message2
这似乎不对吗? 在执行第二部分之前,如何使脚本发出消息?
这正在按预期方式工作。
网络循环是一个已经在处理传入消息的线程。 将发布排队,直到on_message
函数完成,然后网络循环将处理这些排队的发布
TCP堆栈是异步的。 当您要求发送数据时,并不意味着它会立即消失。 您的代码后面有一个事件循环。 如果on_publish()
顺序执行某项操作,则必须将顺序任务分成单独的函数,并在真正发出消息时在下一个on_publish()
上调用它们。
我可以使用该库发送消息:
import paho.mqtt.publish as mqttc
并使用:
mqttc.single("report", payload=message1, qos=2, hostname=XXXX, port=XXXX)
这将遵循脚本的自然流程,并仍然发送消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.