Обновление:
Если вам нужно, чтобы Django работал в нескольких потоках, чтобы публиковать сообщения из вашего приложения Django, вы можете использовать вспомогательные функции из модуля Publish Paho - 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()
даст вам не блокировать фоновый поток.