我已经转换了一些 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 是制作统一指标的最现代方式
我还假设,最好让指示器检查某物的状态,而不是让某物告诉指示器状态(推还是拉)。让 Python 程序每秒检查某物可以吗?
谢谢!
答案1
只是为了确保 Gtk 方式也存在于答案中:
相当于
gtk.timeout_add(PING_FREQUENCY * 1000, self.doWork)
在 gobject 自省(PyGI)中是:
from gi.repository import GLib
GLib.timeout_add(PING_FREQUENCY * 1000, self.doWork)
但是,当每隔 x 秒定期检查某些内容时,您应该使用
GLib.timeout_add_seconds(PING_FREQUENCY, self.doWork)
这使得 Glib 可以对计时器进行分组,从而节省电量,这对于移动设备来说很重要。文档:
同时触发的定时器分组会提高功率和 CPU 效率,因此如果您的定时器以秒为单位,并且您不需要第一个定时器在从现在起的一秒内启动,则使用 glib.timeout_add_seconds() 比 glib.timeout_add() 更好。
答案2
最好每个...呃...问题都问一个问题。
Python 的标准库有threading
一个模块,其中有一个Timer
类可以完全满足您的需要。文档。
关于推送与拉取 - 当发生某事时,您的应用程序收到通知(推送)肯定比每秒检查是否发生某事(拉取)更好 - “我们到了吗?我们到了吗?我们到了吗?...” - 因为它允许您的应用程序处于休眠状态,直到收到通知,而不是每秒进行相同的重复检查。然而,对于某些类型的活动,获取通知可能很棘手,因此这取决于您的应用程序的性质。过于频繁地进行检查也会对电池寿命和其他方面产生不利影响。