PYGTK zu PYGI: gtk.timeout_add äquivalent

9

Ich habe Python-Code für die Verwendung von PYGI konvertiert, kann aber nicht herausfinden, wie diese Zeile konvertiert wird:

gtk.timeout_add(PING_FREQUENCY * 1000, self.doWork)

Um klar zu sein, da ich den Unterschied zwischen PYGTK und PYGI nicht wirklich kenne, wird mein neuer Code verwendet

from gi.repository import Gtk
from gi.repository import AppIndicator3 as appindicator

wie hier gezeigt https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators#Python_version

Der vollständige Code, den ich konvertieren möchte , ist hier http://pastebin.com/raw.php?i=aUtASRpy

Was ist das Äquivalent von

gtk.timeout_add(PING_FREQUENCY * 1000, self.doWork)

in PYGI?

Ich gehe auch davon aus, dass PYGI der modernste Weg ist, einen Einheitsindikator zu erstellen

Ich gehe auch davon aus, dass es am besten ist, wenn der Indikator den Zustand von etwas überprüft, anstatt dass etwas dem Indikator den Zustand mitteilt (Push vs Pull). Ist es in Ordnung, wenn ein Python-Programm jede Sekunde etwas überprüft?

Vielen Dank!

onBootQuestioner
quelle

Antworten:

1

Es ist besser, eine Frage pro ... äh ... Frage zu stellen.

Die Standardbibliothek von Python verfügt threadingüber ein Modul mit einer TimerKlasse, die genau das tut, was Sie benötigen. Dokumentation .

In Bezug auf Push vs Pull ist es definitiv besser, wenn Ihre Anwendung eine Benachrichtigung erhält, wenn etwas passiert (Push), als jede Sekunde zu überprüfen, ob etwas passiert ist (Pull) - "Sind wir schon da? Sind wir schon da? Sind wir schon da?". . "- weil Ihre App nur schlafen und nichts tun kann, bis sie benachrichtigt wird, anstatt jede Sekunde dieselbe Wiederholungsprüfung durchzuführen. Die Sache ist jedoch, dass es für einige Arten von Aktivitäten schwierig sein kann, eine Benachrichtigung zu erhalten, was von der Art Ihrer Anwendung abhängt. Zu häufige Überprüfungen sind auch schlecht für die Akkulaufzeit und andere Dinge.

Sergey
quelle
Danke, das führt mich zu hacken diesen zusammen pastebin.com/raw.php?i=0jLxZ994 mit großer Hilfe von stackoverflow.com/questions/9812344/... Aber jetzt Zeit zu lernen , wie man eine Art von Hörer zu machen , da mit dem, was Ich denke daran, dass die Mehrheit der "Umfragen" feststellen wird, dass sich nichts geändert hat, aber das ist ein anderes Mal. Vielen Dank!
onBootQuestioner
19

Nur um sicherzustellen, dass der Gtk-Weg auch in einer Antwort vorhanden ist:

Das Äquivalent von

gtk.timeout_add(PING_FREQUENCY * 1000, self.doWork)

bei der Selbstbeobachtung von Objekten (PyGI) ist:

from gi.repository import GLib
GLib.timeout_add(PING_FREQUENCY * 1000, self.doWork)

Wenn Sie jedoch regelmäßig alle x Sekunden etwas überprüfen, sollten Sie verwenden

GLib.timeout_add_seconds(PING_FREQUENCY, self.doWork)

Dadurch kann der Glib Timer gruppieren und so Strom sparen, was für mobile Geräte wichtig ist. Aus der Dokumentation :

Die Gruppierung von Timern, die gleichzeitig ausgelöst werden sollen, führt zu einem leistungsfähigeren und CPU-effizienteren Verhalten. Wenn Ihr Timer also mehrere Sekunden lang ist und Sie den ersten Timer nicht in genau einer Sekunde benötigen, verwenden Sie glib.timeout_add_seconds ( ) wird gegenüber glib.timeout_add () bevorzugt.

xubuntix
quelle
4
Dies scheint viel besser zu sein als Threading. Zumal das Threading seltsame Fehler und Abstürze verursachen kann, wenn Sie nicht wirklich wissen, was Sie tun.
Timo