Mein Anliegen ist diesmal etwas komplizierter. Ich denke aber, es ist sinnvoll, hier ein bißchen weiter auszuholen.
In einem Skript frage ich per DBus die Login-Events meiner Pidgin-Buddies ab. Darum kümmert sich die Klasse "LoginListener". Sie fristet ihr Dasein in einer Endlosschleife und gibt bei jedem Login eines Buddies mittels Callback-Funktion seinen Alias und die aktuelle Uhrzeit zurück.
Das klappt bisher alles ganz gut. Nun möchte ich aber die jeweils letzte Login-Uhrzeit meiner Buddies abspeichern. In etwa so:
Code: Alles auswählen
logtimes = { 'snafu': '11.01.2009 - 15:29', 'xyz': '10.01.2009 - 14:30', usw }
Code: Alles auswählen
logger.logtimes[alias] = logtime
Hintergrund des Vorhabens ist, dass ich gerne wissen möchte, inwiefern die Leute meine Nachrichten gelesen haben könnten (sprich: zwischenzeitlich online waren). Wenn nämlich mal jemand "nachweislich" ein paar Tage nicht online war, muss ich mich wenigstens nicht wundern, warum derjenige nicht antwortet. Und da ich Pidgin hier fast den ganzen Tag am Laufen habe (also ständig verbunden bin), kann ich das IMHO einigermaßen nachhalten.
Zurück zum Thema: Geplant ist nun, dass Pickle mir mein Dictionary nach jeder Änderung der Werte in eine Datei schreibt. Die jeweils alten Werte werden dabei überschrieben, denn mich interessiert ja nur der letzte Login. Das soll vermeiden, dass bei einem Systemabsturz oder etwas ähnlichem, die aktuellen Daten verloren sein könnten. Außerdem könnte somit der Logger als Hintergrundprozess in seinem Loop laufen, aber gleichzeitig kann ein neuer Prozess mittels "last_login(buddy)" prüfen, wann snafu zuletzt online war...
Meine Frage ist nun: Bietet Python eine einfache Möglichkeit, die Veränderungen an einem Attribut zu überwachen, damit ich entsprechend meine Save-Funktion aufrufen kann? Ich dachte an sowas:
Code: Alles auswählen
while True:
if self.logtimes changed:
self.save_logtimes()