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 を使用しています