python mainloop,添加定时事件

时间:2017-12-11 15:24:31

标签: python timer gobject

我有一个基于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分钟调用一次。

似乎mainloop.run()是一个阻塞函数,所以我想我需要在mainloop中添加一个类型的计时器......?

我尝试过实现一些定期执行的函数: Executing periodic actions in Python 但它们都是阻塞的,所以mainloop.run()不会被执行。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用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()