gobject.timeout_add鼻子测试中不起作用



我在mopidy核心中添加了一个模块,该模块使用gobject.timeout_add()作为重复函数。它在正常运行时工作正常,但是在运行测试时,处理程序函数似乎永远不会被调用。

所测试的模块具有一种方法,该方法启动一个大约每半秒发出一次事件的常规进程。测试调用该方法,然后调用 time.sleep(2)。计时器函数中的事件不会发生,计时器函数中的某些调试日志记录也不会发生。其他事件和调试日志记录(在计时器功能之外)工作正常。

我需要做什么才能让gobject.timeout_add()在鼻子测试中工作?还是我需要在测试中使用 time.sleep() 以外的其他东西才能允许其他代码运行?它在测试设置中调用gobject.threads_init(),还有什么需要做的吗?

您需要运行事件循环。 正如g_timeout_add的文档所解释的那样,该函数(以及 glib 中的其他类似函数)将创建一个新的超时源,然后将其附加到事件循环(嗯,GMainContext,但你真的不需要担心)。 这并不等同于生成一个新线程并让它在您指定的超时持续时间内休眠,这似乎是您期望的行为 - 使用主循环允许所有事情在单个线程中发生。

最新更新