从rhythmbox插件启动python webserver

时间:2012-09-09 22:02:30

标签: python django wsgi gobject rhythmbox

我试图实现一个类似于rhythmweb的Rhythmbox插件,但我在插件中启动HttpServer时遇到了问题。

如果我像通常那样启动服务器(例如使用make_server(...)。server_forever()),插件会阻止rhythmbox。所以我查看了rhythmweb,但每次我向服务器发出请求时都会出现段错误。这就是我所做的:

class WSGIRefWebServer(IDjangoWebServer):
def __init__(self, host, port, settings):
    IDjangoWebServer.__init__(self, host, port, settings)

def _start_server(self):
    django_handler = django.core.handlers.wsgi.WSGIHandler()
    self.__server = make_server(self._host, self._port, django_handler)
    self._is_running = True

    def request_loop(source, cb):
        self.__server.handle_request()
        return True

    gobject.io_add_watch(self.__server.socket, gobject.IO_IN, request_loop)

如果我用self .__ server.server_forever()替换最后一行,一切正常,但rhythmbox被阻止。

我的第二个方法是在一个新线程中启动web服务器,它运行得很好,但是在django应用程序中使用rhythmbox shell对象时遇到了一些麻烦。

所以我正在寻找一种方法,启动一个网络服务器,它不会阻止rhythmbox,但会在同一个线程中运行。 我不明白为什么第一种方法会导致段错误,因为rhythmweb也是这样做的。

我希望你能解决我的问题。

btw。:我在debian squeeze(测试)上使用python 2.7和rhythmbox 2.97

1 个答案:

答案 0 :(得分:3)

查看github.com/fossfreedom/rhythmweb处的代码后,我能够确定问题:

我从gi.repository导入了 gobject 而不是 GObject 。现在一切顺利! :)

感谢fossfreedom提示!