PYGTK do PYGI: ekwiwalent gtk.timeout_add

9

Przekształciłem trochę kodu Pythona do używania PYGI, ale nie mogę wymyślić, jak przekonwertować ten wiersz:

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

Dla jasności, ponieważ tak naprawdę nie znam różnicy między PYGTK a PYGI, mój nowy kod używa

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

jak pokazano tutaj https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators#Python_version

Pełny kod, który próbuję przekonwertować, znajduje się tutaj http://pastebin.com/raw.php?i=aUtASRpy

Co jest równoważne z

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

w PYGI?

Zakładam również, że PYGI jest najnowocześniejszym sposobem na uzyskanie wskaźnika jedności

Zakładam również, że najlepiej jest sprawdzić wskaźnik czegoś, a nie coś, aby poinformować wskaźnik o stanie (push vs pull). Czy dobrze jest mieć program python sprawdzający coś co sekundę?

Dzięki!

onBootQuestioner
źródło

Odpowiedzi:

1

Lepiej zadać jedno pytanie na ... err ... pytanie.

Standardowa biblioteka Pythona ma threadingmoduł, który ma Timerklasę, która robi dokładnie to, czego potrzebujesz. Dokumentacja .

Jeśli chodzi o push vs pull - zdecydowanie lepiej jest, gdy aplikacja otrzyma powiadomienie, gdy coś się wydarzy (push) zamiast sprawdzać, czy coś się dzieje co sekundę (pull) - „czy już tam jesteśmy? Już tam jesteśmy? Już tam jesteśmy ?. . ”- ponieważ pozwala aplikacji po prostu spać i nic nie robić do momentu powiadomienia, w przeciwieństwie do wykonywania tej samej powtarzanej kontroli co sekundę. Chodzi jednak o to, że w przypadku niektórych rodzajów działań uzyskanie powiadomienia może być trudne, więc zależy to od charakteru aplikacji. Zbyt częste sprawdzanie jest również niekorzystne dla żywotności baterii i innych rzeczy.

Siergiej
źródło
Dziękuję, to skłoniło mnie do zhakowania tego pastebin.com/raw.php?i=0jLxZ994 z dużą pomocą stackoverflow.com/questions/9812344/... Ale teraz czas nauczyć się, jak zrobić coś w rodzaju słuchacza, skoro dzięki temu Mam na myśli, że większość „ankiet” odkryje, że nic się nie zmieniło, ale to już po raz kolejny. Dzięki!
onBootQuestioner
19

Aby upewnić się, że sposób Gtk jest również obecny w odpowiedzi:

Odpowiednik

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

w introspekcji gobject (PyGI) jest:

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

Jednak, sprawdzając coś regularnie co x sekund, powinieneś użyć

GLib.timeout_add_seconds(PING_FREQUENCY, self.doWork)

Pozwala to Glibowi grupować liczniki, a tym samym oszczędzać energię, co jest ważne dla urządzeń mobilnych. Z dokumentacji :

Pogrupowanie timerów w tym samym czasie powoduje zwiększenie wydajności i wydajności procesora, więc jeśli twój licznik jest w wielokrotności sekund i nie potrzebujesz pierwszego timera dokładnie za sekundę, użyj glib.timeout_add_seconds ( ) jest lepszy niż glib.timeout_add ().

xubuntix
źródło
4
Wydaje się to o wiele lepsze niż używanie wątków. Zwłaszcza, że ​​wątki mogą powodować dziwne błędy i zawieszanie się, jeśli tak naprawdę nie wiesz, co robisz.
Timo,