我正在尝试类似Rhythmweb的Rhythmbox-plugin,但是从插件中启动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对象时遇到了一些麻烦。

因此,我正在寻找一种启动Web服务器的方法,该方法不会阻止Rhythmbox,但可以在同一线程中运行。
我不明白为什么第一种方法会导致段错误,因为rhythmweb以相同的方式进行操作。

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

顺便说一句:我在debian squeeze上使用python 2.7和rhythmbox 2.97(测试)

最佳答案

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

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

感谢fossfreedom的提示!

10-06 00:54