Я пишу приложение django, которое должно действовать как издатель MQTT и как подписчик.
Где мне запустить клиент paho и запустить функцию loop_forever().
Должен ли он быть в wsgi.py?
Я пишу приложение django, которое должно действовать как издатель MQTT и как подписчик.
Где мне запустить клиент paho и запустить функцию loop_forever().
Должен ли он быть в wsgi.py?
Обновление:
Если вам нужно, чтобы Django работал в нескольких потоках, то для публикации сообщений из вашего приложения Django вы можете использовать вспомогательные функции из модуля публикации 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()
позволит вам не блокировать фоновый поток.
localhost:8000
. пожалуйста, проверьте мой вопрос: stackoverflow.com/questions/66417806/
- person Shahriar.M; 01.03.2021
loop_forever()
будет блокироваться навсегда, поэтому, вероятно, его следует запустить в своем собственном потоке. - person hardillb   schedule 07.12.2016