python - How to receive dbus signals when there is a webserver running forever? -
hey guys planning make webserver works dbus signal receiving. webserver runs gevent.wsgiserver because need support of websocket, while dbus handled via python-dbus package.
the question is:
- webserver has event loop running forever, receive dbus signals, python-dbus requires event loop (which mainloop) run forever well.
- i not able make webserver running while keeping snooping dbus signals.
here codes:
if __name__ == '__main__': log = logging.getlogger('rocket.errors') log.setlevel(logging.info) log.addhandler(logging.streamhandler(sys.stdout)) dbus.mainloop.glib.dbusgmainloop(set_as_default=true) bus = dbus.systembus() app = bottle() # register dbus recieve handler #bus.add_signal_receiver(hostheartbeatsignal) bus.add_signal_receiver(testsignal) **this block webserver running!!!!!!!!** mainloop = gobject.mainloop() mainloop.run() @app.route('/websocket', skip = true) def handle_websocket(): print "entering websocket handling" wsock = request.environ.get('wsgi.websocket') if not wsock: abort(400, 'expected websocket request.') while true: try: message = wsock.receive() print "message received" wsock.send("your message was: %r" % message) print "message sent" except websocketerror: break default_cert = os.path.join(sys.prefix, 'share', os.path.basename(__file__), 'cert.pem') gevent.pywsgi import wsgiserver geventwebsocket import websocketerror geventwebsocket.handler import websockethandler server = wsgiserver(("0.0.0.0", 443), app, keyfile = default_cert, certfile = default_cert, handler_class=websockethandler) server.serve_forever()
you can run 1 of main loops in thread.
Comments
Post a Comment