Como criar servidores Twisted que são capazes de fazer troca de código quente em Python?

Eu desenvolvi um conjunto de servidores de streaming de áudio, todos eles estão usando o Twisted, e eles estão em Python, é claro. Eles funcionam, mas um problema continua me incomodando, quando encontrei alguns erros no servidor em execução ou quero adicionar algo ao servidor, preciso interrompê-los e iniciar. Ao contrário dos servidores HTTP, não há problema em reiniciá-los sempre, mas não com os servidores de streaming de áudio. Depois de reiniciar meu servidor de streaming, significa que meus usuários encontrarão uma desconexão.

Tentei configurar um bueiro (um serviço ssh para servidores Twisted, você pode fazer login e digitar o código Python no console para fazer alguma coisa) e conectar-se ao console, recarregar os módulos Python em tempo real. Às vezes funciona, mas é difícil de controlar. Você nunca sabe quantas instâncias da classe antiga existem no servidor, e algumas delas podem ser difíceis de alcançar, e os relacionamentos de classe seriam muito complexos. Além disso, ele pode funcionar em algumas situações, mas às vezes você realmente precisa reiniciar o servidor; por exemplo, você está executando o servidor com reator seletor e deseja executá-lo com o reator epoll; então, é necessário reiniciá-lo. Outro exemplo, quando o uso da memória é muito alto, você também precisa reiniciá-los.

Para construir esse sistema, tenho uma idéia que me vem à cabeça, acho que é possível entregar essas conexões e dados de um processo para outro. Por exemplo:

Temos um servidor chamado Broadcasting, e a instância em execução está sob rev.123, e queremos substituí-lo por 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

Isso é possível? Não tenho ideia de que a vida útil dos identificadores de soquete esteja vinculada a processos ou não, pensei que os soquetes criados por um processo serão fechados quando o processo do criador for morto, mas não tenho certeza. Se for possível, existem diretrizes ou artigos para projetar esse tipo de mecanismo de troca de código quente? E há algo que pode alcançar o que eu quero que o Twisted já tenha sido feito?

Obrigado.

questionAnswers(1)

yourAnswerToTheQuestion