Запустите веб-сервер Python из плагина Rhythmbox

Я пытаюсь реализовать плагин Rhythmbox, похожий на rhythmweb, но у меня проблема с запуском 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(), то все будет нормально, но rhythmbox заблокирован.

Мой второй подход состоял в том, чтобы запустить веб-сервер в новом потоке, который работает довольно хорошо, но затем у меня возникли некоторые проблемы с использованием объекта оболочки rhythmbox в приложении django.

Поэтому я ищу способ запустить веб-сервер, который не блокирует ритмбокс, но работает в том же потоке. Я не могу понять, почему первый подход приводит к segfault, так как Rhythmweb делает это так же.

Я надеюсь, что вы можете помочь мне с моей проблемой.

Кстати: я использую Python 2.7 и Rhythmbox 2.97 на сжатие Debian (тестирование)

1 ответ

Решение

После просмотра кода на https://github.com/fossfreedom/rhythmweb я смог определить проблему:

Я импортировал gobject вместо GObject из gi.repository. Теперь все работает хорошо!:)

Спасибо fossfreedom за подсказку!

Другие вопросы по тегам