Django MQTTパブリッシャーおよびサブスクライバーとして機能するアプリケーションを作成しています。
Pahoクライアントをどこで起動してloop_forever()関数を実行すればよいですか。
それはwsgi.pyにあるべきですか?
更新:
Django複数のスレッドで実行する必要がある場合は、Djangoアプリからメッセージを発行するために、PahoのPublishモジュールのヘルパー関数を使用できます- 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()
を使用すると、バックグラウンドスレッドがブロックされなくなります。