2024-05-21 18:03:09 发布
网友
我正在编写一个django应用程序,它应该充当MQTT发布者和订阅者。
我应该在哪里启动paho客户端并运行loop_forever()函数。
应该在wsgi.py中吗?
更新:
如果需要在多个线程中运行Django,那么要发布Django应用程序中的消息,可以使用Paho-https://eclipse.org/paho/clients/python/docs/#id17的publish模块中的helper函数 在这种情况下,不需要创建mqtt客户机的实例并启动循环。要订阅某个主题,请考虑将mqtt client作为独立脚本运行,并导入Django应用程序所需的模块(不要忘记在脚本中设置Django环境)。
只有在一个线程中运行Django时,下面的答案才是好的,这在生产中并不常见。
在应用程序文件夹中创建mqtt.py,并将所有相关代码放在那里。例如:
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()!
loop_forever()
然后在应用程序中__init__.py调用loop_start():
__init__.py
loop_start()
from . import mqtt mqtt.client.loop_start()
使用loop_start()而不是loop_forever()将不会阻塞后台线程。
更新:
如果需要在多个线程中运行Django,那么要发布Django应用程序中的消息,可以使用Paho-https://eclipse.org/paho/clients/python/docs/#id17的publish模块中的helper函数 在这种情况下,不需要创建mqtt客户机的实例并启动循环。要订阅某个主题,请考虑将mqtt client作为独立脚本运行,并导入Django应用程序所需的模块(不要忘记在脚本中设置Django环境)。
只有在一个线程中运行Django时,下面的答案才是好的,这在生产中并不常见。
在应用程序文件夹中创建
mqtt.py
,并将所有相关代码放在那里。例如:不要在这里叫
loop_forever()
!然后在应用程序中
__init__.py
调用loop_start()
:使用
loop_start()
而不是loop_forever()
将不会阻塞后台线程。相关问题 更多 >
编程相关推荐