PYGTK to PYGI: эквивалент gtk.timeout_add

Я преобразовал некоторый код 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 проверяла что-то каждую секунду?

Спасибо!

9
задан 14 December 2012 в 12:09

2 ответа

Лучше задавать один вопрос на ... ошибочный ... вопрос.

Стандартная библиотека Python имеет модуль threading, который имеет класс Timer, который делает именно то, что вам нужно. Документация .

Относительно push vs pull - определенно лучше, когда ваше приложение получает уведомление, когда что-то происходит (push), вместо того, чтобы проверять, происходит ли что-то каждую секунду (pull) - «мы уже здесь? Мы там еще? Мы там?» пока? .. "- потому что оно позволяет вашему приложению просто спать и ничего не делать, пока не получит уведомление, в отличие от повторяющейся проверки каждую секунду. Однако дело в том, что для некоторых видов деятельности может быть сложно получить уведомление, поэтому это зависит от характера вашего приложения. Слишком частое выполнение проверок также вредно для батареи и других вещей.

0
ответ дан 14 December 2012 в 12:09

Просто чтобы убедиться, что путь 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 ().

0
ответ дан 14 December 2012 в 12:09

Другие вопросы по тегам:

Похожие вопросы: