3
我在玩DBus和python。我創建了一個非常簡單的DBus客戶端和相應的服務器。當它們運行在它自己的python進程上時,它可以很好地工作。非常簡單的python-dbus服務器/客戶端在同一個過程中
但是,我試圖讓它在相同的過程中工作,但它只能運行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中重現這個問題。
我在做什麼錯?