2017-02-27 10 views
2

Um eine ziemlich lange Erklärung ziemlich einfach für jemanden zu machen, der nicht vollständig in mein Projekt als ich ist; Ich versuche einen Weg zu finden, um globale Variablen zu erkennen, die sich in Python 2.7 ändern.Python erkennt ändernde (globale) Variable

Ich versuche, aktualisiert zu einem anderen Gerät, die sie registriert.

Um Verkehr und CPU-Last zu reduzieren, anstatt eine periodische Update-Nachricht zu wählen, dachte ich daran, nur eine Update-Nachricht zu senden, wenn sich eine Variable ändert, und ich bin jetzt vielleicht müde, aber ich weiß nicht, wie ich kann Erkennen Sie eine Variable, die sich ändert.

Gibt es eine Bibliothek oder etwas, das ich nutzen kann?

Vielen Dank!

+3

Es sollte nur eine endliche Anzahl von Stellen geben, die die Variable ändern. Erstellen Sie eine Funktion, die eine Änderung an der Variablen vornimmt und gleichzeitig das Update sendet. Machen Sie jeden Ort, der die Variable ändern möchte, stattdessen diese Funktion aufrufen. * Encapsulation * ist das Schlüsselwort hier. – deceze

+0

Ändern Sie den Namen der Variablen auch, damit Sie einen Fehler für anythign bekommen, der nicht durch die neue Funktion geht – doctorlove

+0

Diese Antwort hat einige Hinweise: http://stackoverflow.com/questions/7540443/detecting-change-in-the-value- of-python-variables und erwähnt ein notify-Paket: http://download.gna.org/py-notify/reference/index.html – doctorlove

Antwort

0

Sie könnten die Pub/Sub-Funktion von Redis verwenden, wenn diese Art von Verhalten in Ihrer Codebasis typisch ist. https://redis.io/topics/pubsub.
Jedes Mal, wenn sich Ihre Variable ändert, veröffentlichen Sie dieses Ereignis auf einem Kanal.
Zum Beispiel nennen wir den Kanal variableUpdates.
Die Geräte, die von Ihrem Variablenwert abhängig sind, abonnieren den Kanal VariableUpdates.
Jedes Mal, wenn sich Ihre Variable ändert, veröffentlichen Sie dieses Ereignis auf dem Kanal VariableUpdates.
Wenn dies passiert, werden Ihre Listener über dieses Ereignis benachrichtigt, lesen den neuen Variablenwert und verwenden ihn in ihrem eigenen Kontext.