在回调执行期间处理/排队回调调用
问题描述:
我正在使用paho-mqtt库来编写一个MQTT脚本,该脚本在发布到某个主题的消息时触发回调函数,并试图确定是否需要编写某种“消息队列”功能,以便推迟连续回调的执行,直到前一个回调已经返回。在回调执行期间处理/排队回调调用
回调函数可能需要一段时间才能执行,并且在回调函数返回之前可能有其他消息发布到触发器主题的情况。
似乎MQTT将推迟它本身,连续的回调存储直到前一个回调已经返回,但我只是希望得到一些确认。
感谢
Aarron
答
我的理解是,回调排队,但因为我不是100%肯定我写了一对脚本的测试行为。
首先认购和回调:
import paho.mqtt.client as mqtt
from time import sleep
def on_connect(client, userdata, flags, rc):
client.subscribe('callback-test/#')
def test1(client, userdata, message):
print("Test1 start")
sleep(2)
print("Test1 done")
def test2(client, userdata, message):
print("Test2 start")
sleep(2)
print("Test2 done")
def on_log(client, userdata, level, buf):
print(level, buf)
client = mqtt.Client()
client.on_connect = on_connect
client.message_callback_add('callback-test/1', test1)
client.message_callback_add('callback-test/2', test2)
client.on_log = on_log
client.connect("test.mosquitto.org")
client.loop_forever()
这里是送消息来触发这些回调脚本:
import paho.mqtt.client as mqtt
# noinspection PyShadowingNames,PyUnusedLocal,PyUnusedLocal,PyUnusedLocal
def on_connect(client, userdata, flags, rc):
client.publish('callback-test/1', "test1")
client.publish('callback-test/2', "test2")
# noinspection PyShadowingNames,PyUnusedLocal,PyUnusedLocal
def on_log(client, userdata, level, buf):
print(level, buf)
client = mqtt.Client()
client.on_connect = on_connect
client.on_log = on_log
client.connect("test.mosquitto.org")
client.loop_forever()
当您运行这两个脚本的第一个返回:
Test1 start
Test1 done
Test2 start
Test2 done
从这个测试我觉得它很自信,它会自动排队回调。