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!

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.


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 ().


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.