O que há de tão legal no Twisted? [fechadas]

83

Estou ouvindo cada vez mais que o framework Twisted do Python balança e outros frameworks empalidecem em comparação.

Alguém pode lançar alguma luz sobre isso e possivelmente comparar o Twisted com outras estruturas de programação de rede.

Anton Gogolev
fonte
2
Não parece haver nada lá fora que se compare nem remotamente ao Twisted, então essa pergunta é um pouco difícil de responder. Que alternativas você está considerando?
Sven Marnach
1
@Sven Nem mesmo sendo um desenvolvedor Python, estou apenas curioso para saber o que torna o Twisted tão bom quanto é declarado.
Anton Gogolev
2
@Sven Marnach: Depende de um domínio de problema, por exemplo, geventé uma alternativa ao Twisted para o aplicativo "adivinho" blip.tv/file/4883016
jfs

Respostas:

131

Existem muitos aspectos diferentes do Twisted que você pode achar interessantes.

Twisted inclui muitas e muitas implementações de protocolo, o que significa que muito provavelmente haverá uma API que você pode usar para se comunicar com algum sistema remoto (cliente ou servidor na maioria dos casos) - seja HTTP , FTP , SMTP, POP3, IMAP4 , DNS , IRC, MSN, OSCAR, XMPP / Jabber , telnet, SSH , SSL, NNTP , ou um dos protocolos realmente obscuros como Finger ou ident, ou um dos protocolos de construção de protocolo de nível inferior como DJB's netstrings , simples protocolos orientados a linha , ou mesmo um dos protocolos personalizados da Twisted como Perspective Broker (PB) ouProtocolo de mensagens assíncronas (AMP) .

Outra coisa legal sobre o Twisted é que além dessas implementações de protocolo de baixo nível, você geralmente encontrará uma abstração que é um pouco mais fácil de usar. Por exemplo, ao escrever um servidor HTTP, Twisted Web fornece uma abstração de "Recurso" que permite construir hierarquias de URL a partir de objetos Python para definir como as solicitações serão respondidas.

Tudo isso está vinculado a APIs cooperantes, principalmente devido ao fato de que nenhuma dessas funcionalidades é implementada por bloqueio na rede, portanto, você não precisa iniciar um thread para cada operação que deseja fazer . Isso contribui para a escalabilidade que as pessoas muitas vezes atribuem ao Twisted (embora seja o tipo de escalabilidade que envolve apenas um único computador, não o tipo de escalabilidade que permite que seu aplicativo cresça para usar um cluster inteiro de hosts) porque o Twisted pode lidar com milhares de conexões em um único encadeamento, o que tende a funcionar melhor do que ter milhares de encadeamentos, cada um para uma única conexão.

Evitar encadeamento também é benéfico para teste e depuração (e, portanto, confiabilidade em geral). Como não há troca de contexto preventiva em um programa baseado em Twisted típico, você geralmente não precisa se preocupar com o bloqueio. As condições de corrida que dependem da ordem dos diferentes eventos de rede que acontecem podem ser facilmente testadas na unidade simulando esses eventos de rede (enquanto a simulação de uma troca de contexto não é um recurso fornecido pela maioria (qualquer?) Biblioteca de encadeamento).

A Twisted também se preocupa muito, muito com a qualidade . Então, você raramente encontrará regressões em uma versão do Twisted, e a maioria das APIs simplesmente funcionam, mesmo se você não as estiver usando da maneira comum (porque tentamos testar todas as maneiras de usá-las, não apenas as comuns maneira). Isso é particularmente verdadeiro para todo o código adicionado ao Twisted (ou modificado) nos últimos 3 ou 4 anos, uma vez que 100% de cobertura de linha tem sido um requisito mínimo de teste desde então.

Outro ponto forte frequentemente esquecido do Twisted são seus dez anos descobrindo diferentes peculiaridades da plataforma . Existem muitos erros de soquete não documentados em diferentes plataformas e é realmente difícil saber que eles existem, quanto mais lidar com eles. O Twisted gradualmente cobriu mais e mais deles, e é muito bom nisso neste ponto. Projetos mais jovens não têm essa experiência, então eles perdem modos de falha obscuros que provavelmente só acontecerão com os usuários de qualquer projeto que você lançar, não com você.

Dito isso, o que eu acho mais legal no Twisted é que é uma biblioteca muito chata que me permite ignorar muitos problemas realmente chatos e me concentrar apenas nas coisas interessantes e divertidas. :)

Jean-Paul Calderone
fonte
1
e parece mal documentado no link que você forneceu sobre abstração de recursos. Mas obrigado pela ótima resposta, voto positivo.
vinipsmaker
Um bom ponto é explicar sobre "erros de soquete não documentados". Bela explicação. Obrigado.
Haranadh
Estou usando Twisted e Django há um tempo e estou chegando a um ponto em que sinto que posso substituir Django por Twisted. Parece estranho, mas eu só preciso de um aplicativo de front-end e definiria todos os meus protocolos no Twisted e usaria algum ORM para gerenciar meu banco de dados. No entanto, vejo distorcida como a estrutura que não está tentando fazer com que você seja capaz de fazer apenas uma coisa.
Durodola Opemipo
9

Bem, provavelmente é de acordo com o gosto.

Twisted permite que você crie facilmente servidores / clientes de rede orientados a eventos, sem realmente se preocupar com tudo o que é necessário para fazer isso. E graças à licença do MIT , o Twisted pode ser usado em quase qualquer lugar. Mas eu não fiz nenhum benchmarking, então não tenho ideia de como isso pode ser dimensionado, mas estou supondo que seja muito bom.

Outra vantagem seriam os Twisted Projects , com os quais você pode ver rapidamente como implementar a maioria dos servidores / serviços que deseja.

O Twisted também tem uma excelente documentação , quando comecei com ele algumas semanas atrás, consegui rapidamente obter um protótipo funcional.

Muito novo na cena do python, corrija-me se eu estiver errado.

Johann du Toit
fonte
8
Uma das grandes vantagens de começar com o Twisted é que há uma série de problemas de escalabilidade que simplesmente nunca aparecem devido à forma como o próprio Twisted foi projetado. Ele permite que você descubra maneiras novas e criativas de dar um tiro no próprio pé, em vez de primeiro redescobrir todas as maneiras mundanas de fazer isso ao criar um aplicativo em rede :)
ncoghlan
Sim, como um novato em trabalhar com Twisted, foi o que descobri rapidamente. E adoro como a arquitetura me lembra muito o Netty [ jboss.org/netty ], que usei extensivamente, então pegar a maneira de pensar foi muito rápido.
Johann du Toit