sve*_*ema 3 python gobject timer
我有一个基于 D-Bus 事件执行操作的 Python 脚本,其简化版本:
import dbus
from dbus.mainloop.glib import DBusGMainLoop
import gobject
DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
# Initialize a main loop
mainloop = gobject.MainLoop()
bus.add_signal_receiver(cb_udisk_dev_add, signal_name='DeviceAdded', dbus_interface="org.freedesktop.UDisks")
bus.add_signal_receiver(cb_udisk_dev_rem, signal_name='DeviceRemoved', dbus_interface="org.freedesktop.UDisks")
mainloop.run()
Run Code Online (Sandbox Code Playgroud)
这将调用 cb_udisk_dev_add 和 -rem 回调函数。现在我想要一个定时回调函数,我喜欢调用它,比如每 5 分钟调用一次。
看来 mainloop.run() 是一个被阻止的函数,所以我想我需要向主循环添加一个计时器......?
我尝试实现一些定期执行的函数: Executing periodal actions in Python ,但它们也都是阻塞的,所以 mainloop.run() 不会被执行。
有什么建议么?
您可以使用 glib 的 g_timeout_add_seconds 函数来注册要在 GMainloop 上下文中执行的回调函数。在Python中,这个函数被封装在GObject中,你可以尝试下面的示例代码:
from gi.repository import GObject
def hello():
print("Hello world!\n")
return True
GObject.timeout_add_seconds(1, hello)
loop = GObject.MainLoop()
loop.run()
Run Code Online (Sandbox Code Playgroud)