我正在编写一个django应用程序,它应该充当MQTT发布者和订阅者。
我应该在哪里启动paho客户端并运行loop_forever()函数。
它应该在wsgi.py吗?
答案 0 :(得分:11)
更新:
如果您需要在多个线程中运行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)
请勿在此致电loop_forever()
!
然后在您的申请__init__.py
中致电loop_start()
:
from . import mqtt
mqtt.client.loop_start()
使用loop_start()
代替loop_forever()
将不会阻止后台线程。