1

rhythmweb に似た 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() に置き換えると、すべて正常に動作しますが、リズムボックスがブロックされます。

私の 2 番目のアプローチは、新しいスレッドで Web サーバーを起動することでした。これはかなりうまく機能しますが、django アプリケーションで rhythmbox シェル オブジェクトを使用する際に問題が発生します。

だから私は、リズムボックスをブロックせずに同じスレッドで実行するWebサーバーを起動する方法を探しています。リズムウェブも同じように行うため、最初のアプローチでセグメンテーション違反が発生する理由がわかりません。

私の問題を解決できることを願っています。

ところで:私は、debian スクイーズ (テスト) で python 2.7 と rhythmbox 2.97 を使用しています

4

1 に答える 1

3

github.com/fossfreedom/rhythmwebでコードを調べた後、問題を特定できました。

gi.repository からGObjectの代わりにgobjectをインポートしていました。今、すべてがうまくいきます!:)

ヒントをくれた fossfreedom に感謝!

于 2012-10-17T17:33:34.807 に答える