2017-08-16 72 views
0

我正在使用paho-mqtt库来编写一个MQTT脚本,该脚本在发布到某个主题的消息时触发回调函数,并试图确定是否需要编写某种“消息队列”功能,以便推迟连续回调的执行,直到前一个回调已经返回。在回调执行期间处理/排队回调调用

回调函数可能需要一段时间才能执行,并且在回调函数返回之前可能有其他消息发布到触发器主题的情况。

似乎MQTT将推迟它本身,连续的回调存储直到前一个回调已经返回,但我只是希望得到一些确认。

感谢

Aarron

回答

0

我的理解是,回调排队,但因为我不是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 

从这个测试我觉得它很自信,它会自动排队回调。