Как создать Twisted серверы, которые могут выполнять горячую замену кода в Python?

Я Я разработал набор серверов потокового аудио, все они используют Twisted, и они, конечно же, на Python. Они работают, но проблема продолжает беспокоить меня, когда я обнаружил некоторые ошибки на работающем сервере, или я хочу что-то добавить на сервер, мне нужно их остановить и запустить. В отличие от HTTP-серверов, их можно перезапускать в любое время, но не с серверами потокового аудио. Как только я перезапущу свой потоковый сервер, это означает, что мои пользователи столкнутся с отключением.

Я попытался установить люк (служба ssh для серверов Twisted, вы можете войти в систему и ввести код Python в консоли, чтобы что-то сделать) и подключиться к консоли, перезагрузив модули Python на лету. Иногда это срабатывает, но сложно контролировать. Вы никогда не знаете, сколько экземпляров старого класса находится на сервере, и некоторые из них могут быть труднодоступными, а отношения классов будут очень сложными. Кроме того, это может работать в некоторых ситуациях, но иногда вам действительно нужно перезапустить сервер, например, вы запускаете сервер с селекторным реактором, и вы хотите запустить его с реактором epoll, тогда вам нужно перезапустить его. Другой пример, когда использование памяти становится слишком высоким, вам также необходимо перезапустить их.

Мне приходит в голову идея построить такую ​​систему, я думаю, можно ли передать эти соединения и данные от процесса к другому. Например:

У нас есть сервер с именем Broadcasting, а запущенный экземпляр - под rev.123, и мы хотим заменить его на rev.124.

Broadcasting rev.123 is running....
Startup Broadcasting rev.124 ....
Broadcasting rev.124 is stand by
Hand over connections from instance of rev.123 to instance of rev.124
Stop Broadcasting rev. 123 instance

Возможно ли это? Я понятия не имею, связано ли время жизни дескрипторов сокетов с процессами или нет, я думал, что сокеты, созданные процессом, будут закрыты, когда процесс-создатель будет убит, но я не уверен. Если это возможно, есть ли какие-либо руководящие принципы или статьи для разработки такого механизма замены горячего кода? И есть ли что-то, что я хочу сделать для Twisted?

Спасибо.

5
задан Fang-Pen Lin 1 February 2011 в 15:24
поделиться