带异步IO库的Pahomqtt

2024-06-16 10:36:35 发布

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

我想实现PAHOMQTT,在其中它应该异步处理传入消息

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

带异步IO的gmqtt:

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_会异步启动吗?据我所知,每次它执行时都会在后台启动一个新线程


Tags: toselfclientasynciomessageondefconnect
1条回答
网友
1楼 · 发布于 2024-06-16 10:36:35

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

如果希望在不阻塞的情况下处理传入消息,则需要实现自己的线程池,只需使用on_message()回调将消息推送到该线程池

相关问题 更多 >