我在玩 DBus 和 python。我创建了一个非常简单的 DBus 客户端和相应的服务器。当每个都在自己的 python 进程上运行时,它可以完美运行。
但是,我试图让它在同一个进程中工作,但它只在我运行代码的 10% 的时间内工作。其余时间,它只是冻结。
我已经尽可能地简化了代码,问题依然存在。代码如下:
from threading import Thread
import gobject
import dbus
import dbus.service
import dbus.mainloop.glib
gobject.threads_init()
dbus.mainloop.glib.threads_init()
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
objname="com.visualtools.venom.MockService"
objpath="/" + objname.replace(".","/")
class ExampleApi(dbus.service.Object):
def __init__(self):
dbus.service.Object.__init__(self, dbus.service.BusName(objname, dbus.SystemBus()), objpath)
@dbus.service.method(objname, out_signature='s')
def ping(self, msg):
return "Message is: %s" %msg
def client():
while not loop.is_running():
continue
api = dbus.Interface(dbus.SystemBus().get_object(objname, objpath), objname)
print "calling api..."
result = api.ping("i'm the client")
print "api result is: %s" %result
loop.quit()
loop = gobject.MainLoop()
server = ExampleApi()
Thread(target=client).start()
loop.run()
只需复制并粘贴到一个文件中,然后运行 10 次。我可以在 debian sid 和 debian squeeze 中重现该问题。
我究竟做错了什么?