Я играю с 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.
Что я делаю неправильно?