【发布时间】:2010-12-30 21:39:40
【问题描述】:
我正在使用 python-dbus 和 cherrypy 来监控 USB 设备并提供 REST 服务来维护插入的 USB 设备的状态。我已经独立编写和调试了这些服务,它们按预期工作。
现在,我将这些服务合并到一个应用程序中。我的问题是: 我似乎无法同时启动两种服务(cherrypy 和 dbus)。一个或另一个阻塞或超出范围,或未初始化。
我已经尝试将每个都封装在自己的线程中,然后对它们调用 start 。这有一些奇怪的问题。
class RESTThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
cherrypy.config.update({ 'server.socket_host': HVR_Common.DBUS_SERVER_ADDR, 'server.socket_port': HVR_Common.DBUS_SERVER_PORT, })
cherrypy.quickstart(USBRest())
class DBUSThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
DBusGMainLoop(set_as_default=True)
loop = gobject.MainLoop()
DeviceAddedListener()
print 'Starting DBus'
loop.run()
print 'DBus Python Started'
if __name__ == '__main__':
# Start up REST
print 'Starting REST'
rs = RESTThread()
rs.start()
db = DBUSThread()
db.start()
#cherrypy.config.update({ 'server.socket_host': HVR_Common.DBUS_SERVER_ADDR, 'server.socket_port': HVR_Common.DBUS_SERVER_PORT, })
#cherrypy.quickstart(USBRest())
while True:
x = 1
运行此代码时,cherrypy 代码未完全初始化。当插入 USB 设备时,cherrypy 继续初始化(好像线程以某种方式链接),但不起作用(不提供数据甚至在端口上建立连接)我查看了 cherrypys wiki 页面但是还没有找到一种启动cherrypy的方法,它可以初始化并返回,所以我可以初始化DBus的东西并能够把它拿出来。
我的终极问题是:有没有办法让cherrypy 启动而不阻塞但继续工作?我想摆脱这个例子中的线程,并在主线程中初始化cherrypy和dbus。
【问题讨论】:
-
我试过这个:stackoverflow.com/questions/510821/… 现在,cherrypy 工作得很好,但 loop.run() 似乎不起作用。