Скрученный: Создание ThreadPool, а затем его демонизация приводит к неинформативным зависаниям

Я разрабатываю сетевое приложение на Twisted, часть которого состоит из веб-интерфейса, написанного на Django.

I желаю использовать WSGI-сервер Twisted для размещения веб-интерфейса, и я написал рабочий плагин "tap", который позволяет мне использовать twistd .

При запуске сервера с -n флаг (не демонизировать) все работает нормально, но когда этот флаг снят, сервер вообще не отвечает на запросы, и сообщения не регистрируются (хотя сервер все еще работает).

В Twisted Trac есть ошибка , которая, кажется, точно описывает проблему, а мой плагин основан на коде , упомянутом в билете .

К сожалению, проблема не была устранена - и она была поднята почти год назад.

Я попытался создать класс ThreadPoolService , который расширяет Service и запускает заданный ] ThreadPool при вызове startService :

class ThreadPoolService(service.Service):
    def __init__(self, pool):
        self.pool = pool

    def startService(self):
        super(ThreadPoolService, self).startService()
        self.pool.start()

    def stopService(self):
        super(ThreadPoolService, self).stopService()
        self.pool.stop()

Однако Twisted, похоже, вообще не вызывает метод startService . Я думаю, что проблема в том, что с подключаемым модулем ServiceMaker может возвращать только одну службу, которая должна быть запущена, а все остальные, принадлежащие тому же приложению, не запускаются. Очевидно, Я возвращаю службу TCPServer , которая содержит корень WSGI.

На этом этапе я наткнулся на кирпичную стену. Есть ли у кого-нибудь идеи, как я могу обойти эту проблему?

5
задан Rob Golding 2 February 2011 в 14:03
поделиться