我有一个基于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()
这将调用cb_udisk_dev_add和-rem回调函数。现在我想有一个定时回调函数,我想每5分钟调用一次。在
看来主循环.run()是一个阻塞函数,所以我想我需要在主循环中添加一个计时器。。。?在
我尝试过实现一些定期执行的函数: Executing periodic actions in Python 但他们也都在阻拦主循环.run()无法执行。
有什么建议吗?在
您可以使用glib的g_timeout_add_seconds函数注册一个回调函数,以便在GMainloop的上下文中执行。在python中,这个函数被封装在GObject中,您可以尝试下面的示例代码:
相关问题 更多 >
编程相关推荐