gpt4 book ai didi

python mainloop,添加定时事件

转载 作者:行者123 更新时间:2023-12-01 02:23:03 29 4
gpt4 key购买 nike

我有一个 Python 脚本,可以根据 D-Bus 事件执行操作,这是其简化版本:

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() 是一个被阻塞的函数,所以我想我需要向主循环添加一个计时器......?

我尝试实现一些定期执行的函数: Executing periodic 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()

关于python mainloop,添加定时事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47756075/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com