【问题标题】:Start a python webserver from a rhythmbox plugin从节奏盒插件启动 python 网络服务器
【发布时间】:2012-09-09 22:02:30
【问题描述】:

我正在尝试实现一个与韵律网类似的 Rhythmbox 插件,但我在从插件中启动 HttpServer 时遇到了问题。

如果我像通常那样启动服务器(例如使用 make_server(...).server_forever())插件会阻止节奏盒。所以我查看了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() 替换最后一行,一切正常,但节奏盒被阻止。

我的第二种方法是在一个新线程中启动网络服务器,效果很好,但是在 django 应用程序中使用节奏盒外壳对象时遇到了一些问题。

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

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

顺便说一句:我在 debian 挤压(测试)上使用 python 2.7 和节奏盒 2.97

【问题讨论】:

  • 如果你想查看代码,我在 github 上有一个 GTK3 版本的 RhythmWeb - 希望这会有所帮助:github.com/fossfreedom/rhythmweb
  • 谢谢!我正在从 gi.repository 导入 gobject,这导致了 io_add_watch 上的段错误。我可以通过导入 GObject 来解决问题。

标签: python django wsgi gobject rhythmbox


【解决方案1】:

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

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

感谢 fossfreedom 的提示!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 2012-10-07
    相关资源
    最近更新 更多