PYGTK до PYGI: еквівалент gtk.timeout_add


9

Я перетворив деякий код Python для використання PYGI, але не можу зрозуміти, як перетворити цю лінію:

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

Щоб зрозуміти, оскільки я не знаю різниці між PYGTK і PYGI, мій новий код використовує

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

як показано тут https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators#Python_version

Повний код, який я намагаюся перетворити, тут http://pastebin.com/raw.php?i=aUtASRpy

Що таке еквівалент

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

в PYGI?

Я також припускаю, що PYGI - це найсучасніший спосіб зробити показник єдності

Я також припускаю, що для індикатора найкраще перевірити стан чогось, а не для того, щоб сказати індикатору стан (push vs pull). Чи добре, щоб програма python щосекунди перевіряла щось?

Дякую!

Відповіді:


1

Краще ставити одне питання на ... помилку ... питання.

Стандартна бібліотека Python має threadingмодуль, який має Timerклас, який робить саме те, що вам потрібно. Документація .

Що стосується push vs pull - то, безумовно, краще, коли ваша програма отримує повідомлення, коли щось відбувається (push), а не перевіряти, чи щось траплялось щосекунди (pull) - "ми там ще є? Ми там ще є? Ми там ще?" . "- тому що він дозволяє вашому додатку просто спати і нічого не робити, поки його не повідомлять, на відміну від того, щоб робити те ж саме повторювальну перевірку щосекунди. Вся справа в тому, що для деяких видів діяльності може бути складно отримати повідомлення, тому це залежить від характеру вашої заявки. Занадто часто робити перевірки також погано для автономної роботи та інших речей.


Дякую, що змусили мене зламати цей pastebin.com/raw.php?i=0jLxZ994 з великою допомогою stackoverflow.com/questions/9812344/… Але тепер пора дізнатися, як зробити якогось слухача, з чого Я маю на увазі, що більшість "опитувань" виявлять, що нічого не змінилося, але це вже в інший час. Дякую!
onBootQuestioner

19

Просто щоб переконатися, що спосіб Gtk також присутній у відповіді:

Еквівалент

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

в інтроспекції gobject (PyGI) є:

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

Однак, перевіряючи щось регулярно кожні х секунд, слід використовувати

GLib.timeout_add_seconds(PING_FREQUENCY, self.doWork)

Це дозволяє Glib групувати таймери і, отже, економити енергію, що важливо для мобільних пристроїв. З документації :

Групування таймерів для одночасного запуску призводить до більшої потужності та ефективної поведінки процесора, тому, якщо ваш таймер працює через кілька секунд, і вам не потрібен перший таймер рівно секунди, використання glib.timeout_add_seconds ( ) є кращим над glib.timeout_add ().


4
Це здається краще, ніж використання різьби. Тим більше, що нарізка може спричинити за собою дивні помилки та блокування, якщо ви насправді не знаєте, що робите.
Тимо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.