python主循环,添加定时事件

2024-10-06 12:47:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个基于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()无法执行。

有什么建议吗?在


Tags: 函数runnamedevimportaddsignalgobject
1条回答
网友
1楼 · 发布于 2024-10-06 12:47:30

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

相关问题 更多 >