【问题标题】:Paho-mqtt with asyncio library带有异步库的 Paho-mqtt
【发布时间】:2021-01-11 10:39:42
【问题描述】:

我想实现 paho-mqtt,它应该在其中异步处理传入的消息。

我已经用 asyncio 实现了 gmqtt,它运行得非常好,但据我了解,paho-mqtt 比 gmqtt 更好用(链接:https://www.emqx.io/blog/comparision-of-python-mqtt-client)。

gmqtt w/异步:

def assign_callbacks_to_client(self, client):
    """ Helper function which sets up client's callbacks. """
    client.on_connect = self.on_connect
    client.on_message = self.on_message
    client.on_disconnect = self.on_disconnect
    client.on_subscribe = self.on_subscribe

async def subscriber(self, mqtt_name):
    """ Connect to mqtt-broker. """
    sub_client = MQTTClient(mqtt_name)
    self.assign_callbacks_to_client(sub_client)
    logging.info("connecting")
    await sub_client.connect(host=config.MQTT_HOST, port=int(config.MQTT_PORT))
    return sub_client

能否请您告诉我,如何使用 asyncio 库实现 paho? 将异步使用 loop_start,据我所知,每次执行它都会在后台启动一个新线程。

【问题讨论】:

    标签: python python-3.x mqtt python-asyncio paho


    【解决方案1】:

    loop_start() 只创建一个后台线程,所有回调都将在其上运行,您不应该直接在这些回调中执行长时间运行的任务,因为它们会阻塞客户端的所有其他操作。

    如果您想在不阻塞的情况下处理传入的消息,那么您需要实现自己的线程池,只需使用on_message() 回调将消息推送到此线程池。

    【讨论】:

    • 你能告诉我如何拥有实现线程池,因为我是新手吗?它会使用线程实现吗?
    • paho-mqtt 是否完全支持 MQTT 5.0 协议?
    • paho-mqtt 是否完全支持 MQTT 5.0 协议?在我的应用程序中,我使用的是 MQTT 5.0 协议,那么在 python paho-mqtt 或 gmqtt(带有 asyncio)中哪个最好?
    • 这是一个完全独立的问题,至于哪个最好,这与 Stack Overflow 无关,因为它完全取决于您的用例和意见。
    猜你喜欢
    • 2022-01-03
    • 2018-10-18
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    相关资源
    最近更新 更多