我使用pygattlib与Python中的蓝牙设备进行交互。 它工作正常,但当我尝试在我的代码中使用DBus时会出现问题。
如果我导入gattlib
和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()