MQTT paho在调用到消息\u callback_add时卡住

2024-04-26 08:01:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用paho.mqtt.client。在

下面是代码的简化版本,但仍然显示了问题所在。在

# -*- coding: utf-8 -*-

import sys
import os
import time
import logging

from time import sleep

import paho.mqtt.client as mqtt

mqtt_server_ip      = "10.42.0.1"
mqtt_server_port    = 1884

subscriptions_qos =[("doorStatus/status", 0),
                    ("doorStatus/eol",0)]

def callback_door_status(client, userdata, message):
    logging.debug("Received %s", message.payload)

def on_log(client, userdata, level, buf):
    logging.debug("%s", buf)

def on_connect(client, userdata, flags, rc):
    logging.info("Successfully connected to MQTT with result code %s", str(rc))
    print("before message_callback_add 1")
    client.message_callback_add("doorStatus", callback_door_status)
    print("after message_callback_add")

    (result, _) = client.subscribe(subscriptions_qos)
    if (result == mqtt.MQTT_ERR_SUCCESS):
        logging.info("Successfully subscribed to MQTT topics with result code %s", str(result))

def on_message(client, userdata, msg):
    logging.debug("Received: Topic: %s Body: %s", msg.topic, msg.payload)

def main():
    logger = logging.getLogger('root')
    logging.basicConfig(format='[%(asctime)s %(levelname)s: %(funcName)20s] %(message)s', level=logging.DEBUG)

    client = mqtt.Client("master")
    client.on_log = on_log
    client.on_connect = on_connect
    client.on_message = on_message
    client.connect(mqtt_server_ip, mqtt_server_port, 60)

    client.loop_forever()

if __name__ == '__main__':
    main()

这是程序的输出:

^{pr2}$

{else>当第一个调用成功建立到cd2}时,您可以看到第1个调用与cd2成功建立连接。在这一点上,我唯一能做的就是终止进程。 我不知道为什么代码会卡住,我也看过文档,但还是找不到任何东西。在


Tags: debugimportclientmessageserveronloggingdef
1条回答
网友
1楼 · 发布于 2024-04-26 08:01:12

我自己设法解决了这个问题。把答案贴在这里,将来可能会对别人有所帮助。在

代码卡住的原因是我遇到了互斥锁(死锁)问题。 ^必须在调用on_connect()之前执行{}。 阅读文档并不是那么简单。在

相关问题 更多 >