Python paho mqtt中的on_消息是否在新线程中运行?

Python paho mqtt中的on_消息是否在新线程中运行?,python,mqtt,paho,Python,Mqtt,Paho,假设我已经订阅了某个主题,而mosquitto服务器正在继续发布关于该主题的消息 当新消息从MOSQUITO代理到达时,如何调用on_message方法?它是否在主线程上运行,从而阻止它并仅在处理当前消息时处理下一条消息,还是在每次新消息到达时使用on_message方法生成新线程 将paho.mqtt.client作为mqtt导入 def on_消息(客户端、用户数据、消息): 打印消息.payload 返回真值 主题=[“主题1”,] client=mqtt.client(“testclie

假设我已经订阅了某个主题,而mosquitto服务器正在继续发布关于该主题的消息

当新消息从MOSQUITO代理到达时,如何调用on_message方法?它是否在主线程上运行,从而阻止它并仅在处理当前消息时处理下一条消息,还是在每次新消息到达时使用on_message方法生成新线程

将paho.mqtt.client作为mqtt导入
def on_消息(客户端、用户数据、消息):
打印消息.payload
返回真值
主题=[“主题1”,]
client=mqtt.client(“testclient”,protocol=mqtt.MQTTv31,clean_session=True)
client.on_message=on_message
client.connect(“127.0.0.1”,1883,60)
对于主题中的tpc:
client.subscribe(tpc,0)
client.loop_forever()

所有回调都在客户端网络线程上运行

这取决于如何“启动”网络线程

如果使用
client.loop\u forever()
方法,则该方法将使用当前线程运行客户端的网络线程,并因此在该调用时阻塞

如果您使用
client.loop\u start()
方法,则会在后台启动一个新线程,以运行网络循环和所有回调

所有回调都会阻止网络线程的执行,这就是为什么不应该直接在回调中运行长时间运行或阻塞任务的原因。如果您需要执行长时间运行的处理,那么应该将传入消息排队,并让另一个线程(或线程池)处理它

p、 s.对于您发布的代码,您应该真正移动for循环和调用以订阅连接上的
回调,以便:

  • 它们只能在成功连接上运行
  • 网络线程正在运行,以处理为订阅发送数据包,以及处理在您完成订阅所有主题之前可能到达的任何传入消息(如果数组长度大于1)