我正在编写django应用程序,该应用程序应充当MQTT发布者和订阅者。
我应该在哪里启动Paho客户端并运行loop_forever()函数。
应该在wsgi.py中吗?
更新:
如果您需要Django的多个线程运行,则发布从您的Django应用程序的信息,您可以使用辅助功能从发布泛美卫生组织的模块- 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()
将使您不会阻塞后台线程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句