如何解决带有 asyncio 库的 Paho-mqtt
我想实现 paho-mqtt,它应该异步处理传入的消息。
我已经用 asyncio 实现了 gmqtt,它运行得非常好,但据我所知,paho-mqtt 比 gmqtt 更好用(链接:https://www.emqx.io/blog/comparision-of-python-mqtt-client)。
gmqtt w/ asyncio :
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,据我所知,它每次执行时都会在后台启动一个新线程。
解决方法
loop_start()
只创建一个后台线程来运行所有回调,您不应该直接在这些回调中执行长时间运行的任务,因为它们会阻止客户端的所有其他操作。
如果您想在不阻塞的情况下处理传入的消息,则需要实现自己的线程池,并仅使用 on_message()
回调将消息推送到此线程池。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。