web-dev-qa-db-ja.com

djangoでpaho mqttクライアントを使用する方法?

Django MQTTパブリッシャーおよびサブスクライバーとして機能するアプリケーションを作成しています。

Pahoクライアントをどこで起動してloop_forever()関数を実行すればよいですか。

それはwsgi.pyにあるべきですか?

13
Raja Sudhan

更新:

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()を使用すると、バックグラウンドスレッドがブロックされなくなります。

11
Max Polezhaev