J'écris une application Django qui devrait agir en tant qu'éditeur MQTT et en tant qu'abonné.
Où dois-je démarrer le client paho et exécuter la fonction loop_forever ().
Doit-il être dans wsgi.py?
Mise à jour:
Si vous avez besoin de Django s'exécutant dans plusieurs threads, puis pour publier des messages depuis votre application Django vous pouvez utiliser les fonctions d'assistance du module Publier de Paho - https : //Eclipse.org/paho/clients/python/docs/#id17 Vous n'avez pas besoin de créer une instance de client mqtt et de démarrer une boucle dans ce cas. Et pour vous abonner à un sujet, pensez à exécuter le client mqtt en tant que script autonome et importez les modules nécessaires de votre application Django (et n'oubliez pas de configurer l'environnement Django dans le script).
La réponse ci-dessous n'est bonne que si vous exécutez Django dans un seul thread, ce qui n'est pas habituel en production.
Créez mqtt.py
Dans votre dossier d'application et mettez-y tout le code associé. Par exemple:
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)
N'appelez pas loop_forever()
ici!
Puis dans votre application __init__.py
Appelez loop_start()
:
from . import mqtt
mqtt.client.loop_start()
L'utilisation de loop_start()
au lieu de loop_forever()
vous évitera de bloquer le thread d'arrière-plan.