在GLib.MainLoop的每次迭代中运行一个函数

时间:2016-12-18 00:59:59

标签: python glib

我正在编写一个使用PyDBus和GLib的简单Python 3程序。

我试图在Raspberry Pi GPIO引脚上检测到边缘事件时使用PyDBus发送信号。

为此,需要在主循环的每次迭代时调用执行此任务的函数。我已经看到timeout_add函数做了类似的动作;但是,timeout_add仅在interval毫秒内运行我的函数。

有没有办法在每次迭代时调用它?

1 个答案:

答案 0 :(得分:0)

使用g_idle_add()。它创建了一个GSource,没有任何先决条件,并且优先级较低,因此它的回调函数在每次主上下文迭代中执行一次,其优先级低于其他未决事件。

如果需要提高优先级,请类似地使用g_idle_add_full()


但是,如@nemequ所述,在架构上最好的解决方案是编写自己的GSource实现(请参见GSourceFuncs的文档),其行为与使用{{ 1}},或者可以通过了解要查询的I / O引脚的详细信息来提高性能。这完全取决于内核为该I / O引脚公开的API,以及如何从用户空间进行轮询。

documentation on writing a custom GSource here