我正在寫一個應該作爲MQTT發佈者和用戶的django應用程序。如何在django中使用paho mqtt客戶端?
我應該在哪裏啓動paho客戶端並運行loop_forever()函數。
它應該在wsgi.py中嗎?
我正在寫一個應該作爲MQTT發佈者和用戶的django應用程序。如何在django中使用paho 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()
會給你不堵後臺線程。
謝謝Max,工作正常!我還有一個疑問,如果我擴展web進程,創建多個mqtt客戶端會發生什麼? 如果是這樣,我該如何阻止? –
@RajaSudhan你是什麼意思「規模的網絡進程」? –
在生產環境中運行django應用程序時,我使用負載均衡器部署在多個服務器上,因此我不想在所有主機中收聽消息。 –
'loop_forever()'將永遠阻塞,所以它應該可能啓動它自己的線程 – hardillb