我正在编写一个使用PyDBus和GLib的简单Python 3程序。
我试图在Raspberry Pi GPIO引脚上检测到边缘事件时使用PyDBus发送信号。
为此,需要在主循环的每次迭代时调用执行此任务的函数。我已经看到timeout_add
函数做了类似的动作;但是,timeout_add
仅在interval
毫秒内运行我的函数。
有没有办法在每次迭代时调用它?
答案 0 :(得分:0)
使用g_idle_add()
。它创建了一个GSource
,没有任何先决条件,并且优先级较低,因此它的回调函数在每次主上下文迭代中执行一次,其优先级低于其他未决事件。
如果需要提高优先级,请类似地使用g_idle_add_full()
。
但是,如@nemequ所述,在架构上最好的解决方案是编写自己的GSource
实现(请参见GSourceFuncs
的文档),其行为与使用{{ 1}},或者可以通过了解要查询的I / O引脚的详细信息来提高性能。这完全取决于内核为该I / O引脚公开的API,以及如何从用户空间进行轮询。