Как использовать Paho MQTT client в django?

Я пишу приложение django, которое должно выступать в качестве издателя MQTT и подписчика.

где я должен запустить клиент paho и запустить функцию loop_forever ().

должен ли он быть в wsgi.py ?

1 ответов


обновление:

Если вам нужно Django работает в нескольких потоках, то для публикации сообщений из вашего приложения Django вы можете использовать вспомогательные функции из модуля публикации Пахо -https://eclipse.org/paho/clients/python/docs/#id17 В этом случае вам не нужно создавать экземпляр клиента mqtt и запускать цикл. И чтобы подписаться на какую-то тему, рассмотрите запуск MQTT client как автономный скрипт и импортируйте туда необходимые модули вашего приложения 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() даст вам не блокируя фоновый поток.