Я преобразовал некоторый код 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 проверяла что-то каждую секунду?
Спасибо!
Лучше задавать один вопрос на ... ошибочный ... вопрос.
Стандартная библиотека Python имеет модуль threading
, который имеет класс Timer
, который делает именно то, что вам нужно. Документация .
Относительно push vs pull - определенно лучше, когда ваше приложение получает уведомление, когда что-то происходит (push), вместо того, чтобы проверять, происходит ли что-то каждую секунду (pull) - «мы уже здесь? Мы там еще? Мы там?» пока? .. "- потому что оно позволяет вашему приложению просто спать и ничего не делать, пока не получит уведомление, в отличие от повторяющейся проверки каждую секунду. Однако дело в том, что для некоторых видов деятельности может быть сложно получить уведомление, поэтому это зависит от характера вашего приложения. Слишком частое выполнение проверок также вредно для батареи и других вещей.
Просто чтобы убедиться, что путь Gtk также присутствует в ответе:
Эквивалент
gtk.timeout_add(PING_FREQUENCY * 1000, self.doWork)
в интроспекции объекта (PyGI):
from gi.repository import GLib
GLib.timeout_add(PING_FREQUENCY * 1000, self.doWork)
Однако, проверяя что-то регулярно каждые x секунд, вы должны использовать
GLib.timeout_add_seconds(PING_FREQUENCY, self.doWork)
Это позволяет Glib группировать таймеры и, следовательно, экономить энергию, что важно для мобильных устройств. Из документации :
Группировка таймеров для одновременного срабатывания приводит к повышению энергопотребления и эффективности использования процессора, поэтому, если ваш таймер работает с кратными секундами, а вы не требуется первый таймер ровно через одну секунду, использование glib.timeout_add_seconds () предпочтительнее glib.timeout_add ().
BLOCKQUOTE>