关于python:如何在Django中使用Paho mqtt客户端?

How to use paho mqtt client in django?

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

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

应该在wsgi.py中吗?


更新:

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

仅当您在单个线程中运行Django(在生产环境中并不常见)时,下面的答案才是好的。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)

在这里不要呼叫loop_forever()

然后在您的应用程序__init__.py中调用loop_start()

1
2
3
from . import mqtt

mqtt.client.loop_start()

使用loop_start()而不是loop_forever()将使您不会阻塞后台线程。