私はMQTTパブリッシャーとサブスクライバーとして動作するdjangoアプリケーションを作成しています。djangoでpaho mqtt clientを使用するには?
ここでは、pahoクライアントを起動してloop_forever()関数を実行する必要があります。
wsgi.pyにする必要がありますか?
私はMQTTパブリッシャーとサブスクライバーとして動作するdjangoアプリケーションを作成しています。djangoでpaho mqtt clientを使用するには?
ここでは、pahoクライアントを起動してloop_forever()関数を実行する必要があります。
wsgi.pyにする必要がありますか?
更新:
あなたはPAHOのモジュールを公開からヘルパー関数を使用することができ、あなたのDjangoアプリケーションからのメッセージを公開するために、複数のスレッドで実行されているDjangoのが必要な場合 - https://eclipse.org/paho/clients/python/docs/#id17 あなたは、インスタンスを作成する必要はありませんこの場合、mqttクライアントのループを開始してください。また、いくつかのトピックを購読するには、mqttクライアントをスタンドアロンスクリプトとして実行し、そこで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()
を使用するには、バックグラウンドスレッドをブロックしていないあなたを与えるだろう。
ありがとうマックスはうまく動作します!!私は別の疑問を持っています。もしWebプロセスを拡大して複数のmqttクライアントを作成するとどうなりますか? もしそうなら、私はそれをどうやって止めるのですか? –
@ RajaSudhan「ウェブプロセスをスケールする」とはどういう意味ですか? –
本番環境でdjangoアプリケーションを実行している間、私はロードバランサを持つ複数のサーバに展開しているので、すべてのホストのメッセージを聞きたくありません。 –
'loop_forever()'は永遠にブロックされるので、おそらく自身のスレッドで開始されるはずです – hardillb