Запустите веб-сервер 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 за подсказку!