如何在django中使用paho mqtt客户端?

Raj*_*han 10 python django mqtt paho

我正在编写一个django应用程序,它应该充当MQTT发布者和订阅者.

我应该在哪里启动paho客户端并运行loop_forever()函数.

它应该在wsgi.py吗?

Max*_*aev 12

更新:

如果您需要在多个线程中运行Django然后从您的Django应用程序发布消息,您可以使用Paho的Publish模块中的帮助函数 - https://eclipse.org/paho/clients/python/docs/#id17 您不需要创建一个mqtt客户端实例并在这种情况下启动一个循环.要订阅一些主题,请考虑将mqtt客户端作为独立脚本运行,然后导入Django应用程序所需的模块(并且不要忘记在脚本中设置Django环境).


只有在单个线程中运行Django时,下面的答案才是好的,这在生产中并不常见.

mqtt.py在应用程序文件夹中创建并将所有相关代码放在那里.例如:

import paho.mqtt.client as mqtt

def on_connect(client, userdata, rc):
    client.subscribe("$SYS/#")

def on_message(client, userdata, msg):
    # Do something
    pass

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect("iot.eclipse.org", 1883, 60)
Run Code Online (Sandbox Code Playgroud)

不要loop_forever()在这里打电话!

然后在你的申请__init__.py电话中loop_start():

from . import mqtt

mqtt.client.loop_start()
Run Code Online (Sandbox Code Playgroud)

使用loop_start()而不是loop_forever()将不会阻止后台线程.