我正在使用pygattlib与 Python 中的蓝牙设备交互。它工作得很好,但是当我尝试在我的代码中使用 DBus 时会出现问题。
如果我导入gattlib
and GLib.MainLoop().run()
,程序在调用run()
.
我发现 gattlib 有自己的 MainLoop 用于内部异步调用。
我没有找到任何可以涵盖此特定问题的内容,只是一些在 C 中具有多个主循环的示例。
这是 Python 代码的相关部分:
import gattlib as bt
try:
from gi.repository import GLib
except ImportError:
import glib as GLib
import dbus
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop
[...do stuff with gattlib here...]
DBusGMainLoop(set_as_default=True)
dbusService = SystemDBus()
try:
loop = GLib.MainLoop()
loop.run() # it stalls here, doesn't respond to DBus or anything
except KeyboardInterrupt:
GLib.MainLoop().quit()