[Programação] A estrutura da web Python mais rápida: wheezy.web

wheezy_web_logo

chiado.web não tem logotipo; Fiz a imagem no GIMP.

Por muito tempo parei de programar em Python, mas isso não me impede de compartilhar as tecnologias que conheço com você;). Há algum tempo atrás comecei a procurar o "melhor" framework web em Python, já que o que usei (Web2Py) era terrivelmente lento. Minha pesquisa me levou a chiado.web; aqueles que o conhecem certamente o fizeram por meio do benchmark espetacular feito pelo autor em seu blog:

framework python-mais rápido

Eu sei, 25.000 solicitações por segundo em comparação com o resto dos frameworks, é um passe real. Eu mesmo usei chiado.web por um tempo e devo dizer que é uma verdadeira obra de arte. Onde quer que você olhe: rapidez, simplicidade, segurança ... Tudo. E acima dele está o trabalho de uma única pessoa: Andriy Kornatskyy.

  • Trabalha com Python 2, Python 3 y pypy. Mesmo que 3 forneça um desempenho melhor, é preferível continuar usando 2 até que 3 esteja maduro o suficiente.
  • Seu design é modularesPortanto chiado.web são mais coisas: chiado.modelo, chiado.html, chiado.segurança… Use as peças que quiser.
  • Documentação Simples e fácil de se entender.
  • Otimização automática de HTML (compacta para que ocupe menos sem usar ferramentas externas).
  • Como poderia ser diferente, é software livre e código aberto ; D.
  • etc ...

No blog do Andriy, há ótimos tutoriais para instalar chiado.web secar o com i18n (vários idiomas); também explica Como usar chiado.web com Nginx. A desvantagem de todos os seus tutoriais é que suponha que você usa Debian, já que ele não testou em outras distros.

Se você usar Fedora e você está interessado chiado.web, você é sortudo! Aqui está o comando que instalará os pacotes necessários para poder seguir seus tutoriais:

sudo dnf install python python-devel python3 python3-devel python-setuptools python-virtualenv libxml2 libxml2-devel libxslt libxslt-devel libmemcached libmemcached-devel memcached memcached-devel gzip ntpdate gettext uwsgi uwsgi-plugin-python socat nginx

O tutorial que Andriy oferece para instalar chiado.web com o Nginx, ele usa um script projetado especificamente para o Debian, então você terá que fazer isso sozinho se usar um sistema diferente. No meu caso, uWSGI é o suficiente para mim, então nunca tentei.

A verdade é que existe chiado.web Acho um crime usar outro framework, então se você trabalha com Python, dê uma olhada nele, pelo menos! A única desvantagem que se pode atribuir a ele é que não traz nenhuma camada de abstração para facilitar o trabalho com bancos de dados (nem precisa, mas tem gente que gosta).

E isso é tudo. Um artigo curto, mas relevante. Prometo trazer mais tecnologias bacanas! Até mais ~.

Aliás, uma curiosidade, sabe por que se chama "chiado"? Andriy é fã do Debian. Deixo lá;).


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   Bruno cascio dito

    O desempenho não é o único fator. Comparado ao Django, é bastante ilegível. E honestamente, as 25000 requisições por segundo devem ser vistas em ação, mas prefiro ficar com 15000 (django) para escrever saudavelmente, e o resto do trabalho delegar para a infraestrutura, que é REALMENTE aquela que vai receber ou não, 25000 pedidos.

    Felicidades! Obrigado pelos dados 🙂

    1.    Bruno cascio dito

      Desnecessário dizer que para benchmark eu uso versões antigas de outros frameworks ...

      1.    lajto dito

        O artigo de referência é de 2012. Ele modificou e expandiu novamente em 2013 e ele mesmo especificou que são desse ano: «Últimas versões disponíveis até o momento desta escrita (15 de março de 2013)»

    2.    lajto dito

      A ilegibilidade que você mencionou, não acho que seja tão ruim. Eu entendo que a facilidade de programação é frequentemente procurada, mas não acho que haja diferenças realmente consideráveis. Usei o Web2Py por um ano e garanto que é um dos frameworks mais fáceis de usar disponíveis. Claro, seu desempenho é terrível em muitos aspectos ... No artigo de benchmark, o próprio Massimo Di Pierro (criador do Web2Py) tem um debate com Andriy no qual ele finalmente admite que há muito a melhorar; falando com Andriy no IRC, ele me disse "há uma filosofia amplamente aceita de colocar tudo em frameworks e inchar com recursos, mesmo que a maioria não seja usada", e como ele estava certo ...

      Sobre o que você diz sobre a infraestrutura, compartilho parcialmente o que você diz; 10.000 de diferença é MUITO, especialmente quando falamos sobre o framework mais popular e maduro versus um muito recente e pouco conhecido. Minha abordagem é sempre combinar eficiência máxima com produtividade máxima, e acho que wheezy.web faz isso melhor. Usei Web2Py (a maioria), Django, Pyramid e wheezy.web e garanto que é incomparável. Depois de se adaptar à maneira dele de fazer as coisas, você não se separa dele. As únicas vantagens do Django são a grande comunidade que possui e os recursos que estão em toda a Internet; isto é: facilidade. wheezy.web é relativamente novo em comparação e muito poucas pessoas sabem sobre ele; se você for fácil, melhor Web2Py ou Django xD.

      Não quero expandir, mas quando falamos de requisições por segundo falamos de simultaneidade. Se a simultaneidade for procurada, Python não é a linguagem apropriada. É para isso que servem outras línguas como Erlang ou Haskell (e se você me apressar, Rust). Mas, precisamente por isso, é impressionante que wheezy.web ocupando tão pouco código, sendo o trabalho de uma pessoa em seu tempo livre e outros fatores, tenha conseguido atingir tal desempenho.

      Eu entendo o que você diz sobre "escrita saudável", mas nunca se sabe o quanto um projeto pode crescer a longo prazo. Usando ferramentas mais eficientes e simultâneas, além de simples (afirmo que wheezy.web é simples pelo desempenho que tem), economize dinheiro e faça o projeto escalar por mais tempo sem alterar o idioma. No final das contas tudo está no dinheiro que você tem que pagar pelo seu servidor. Existem sites muito famosos em PHP, quando o PHP tem um desempenho horrível ... Mas como você resolve esse problema? Comprando servidores melhores. Com a outra abordagem, é resolvido programando melhor e economizando recursos: P.

      Lamento ter me estendido tanto. Sou facilmente apaixonado por xDDD. Felicidades!

      1.    Bruno cascio dito

        Entendi perfeitamente o que você quer dizer, mas justamente pelo que você mencionou, se um projeto tende a crescer ou não, já que a gente vai com chiado não tem camada de banco de dados.

        No meu ponto de vista, é melhor não casar com nenhum idioma. Se você quiser simultaneidade, pode usar o Node também, seu mecanismo é executado em C.

        O que você mencionou sobre desempenho não é apenas escalar verticalmente (caso do PHP), o Facebook por exemplo oferece HHVM, que eu li (não testei) que melhora o desempenho em 50% e isso não é comprar servidores. PHP simples sem camadas de cache e / ou outras formas de otimizar é tão "ruim" quanto qualquer outra linguagem sem a última, e eu quero dizer ruim para dar um nome a eles, não é apenas "código melhor".

        Felicidades! 🙂

      2.    lajto dito

        Vamos ver, não há camada de abstração. Mas você usa a biblioteca ou módulo correspondente para trabalhar com seu banco de dados e fora dele, não há mais mistério. A camada de abstração Web2Py é muito simples, por exemplo, mas o desempenho cai drasticamente porque você não consegue nem escrever SQL otimizado. Tudo está em Python; fácil, mas em troca de desempenho.

        Eu conheço o HHVM e é exatamente por isso que linguagens como PHP são terríveis para os tempos modernos; se o Facebook estivesse em Haskell ou Erlang, não seria necessário criar o HHVM. Use cache, comprima os arquivos que são enviados e recebidos, etc. eles são aspectos óbvios de qualquer desenvolvimento. A questão é que a ferramenta deve estar à altura :). E há ferramentas que não dão isso. O melhor exemplo disso é JavaScript ... Nesse caso, pelo menos existem maravilhas como CoffeeScript, Dart, etc. que compilar para JS.

        Saudações!

      3.    Bruno cascio dito

        Perfeito! 🙂

        Só uma coisa, facebook se usar haskell, mais precisamente Haxl 🙂

      4.    Cessar dito

        Bem, eu uso muito o web2py, concordo que não é o framework mais rápido, mas esse benchmark parece um pouco fora do lugar, ainda mais quando estamos falando de 3 anos atrás, o aplicativo hello burro do web2py é muito carregado em comparação a outros frameworks, mas honestamente não experimentei aquela diferença abismal de desempenho entre meus aplicativos escritos em web2py e django.

        A propósito, em web2py se você pode escrever SQL para realizar as consultas diretamente.

        Saudações.

  2.   urKh dito

    O framework web mais rápido que você diz, mas não mostra alguns exemplos e outros fatores-chave, como desenvolvimento, produtividade, documentação. Django existente, não sei por que parece ser um crime não usar isto: p

    1.    lajto dito

      - Já existem exemplos na documentação. Em sua página BitBucket também: https://bitbucket.org/akorn/wheezy.web/src/tip/demos/
      - Sobre desenvolvimento e produtividade, pessoalmente acho que resumir em "simplicidade" é uma boa opção. O que são estruturas mais simples e fáceis ainda? Claro. Mas não com tanto desempenho.
      - Coloquei o link para a documentação no artigo xDDD.
      - Digo que é crime é porque acredito que uma página da web deve ser o mais eficiente possível, em todos os sentidos. Como mencionei antes, existem frameworks que são mais fáceis de usar, mas usar wheezy.web também não é programação em C. Você apenas precisa se esforçar mais :).

      Saudações ^^.

  3.   lajto dito

    Aliás, caso alguém tenha preguiça de descobrir e pense que Wheezy Web só vence em requisições por segundo ... Aqui estão mais alguns benchmarks:

    http://paste.desdelinux.net/5128 (o filtro de spam de DesdeLinux Não me deixa colocar tantos links)

    Peço desculpas por não incluí-los anteriormente. Achei que um bastasse para despertar a curiosidade xD. Felicidades!

  4.   Fenriz dito

    Até agora feliz com Django.

    1.    barro dito

      Ehh toda vez que leio essas coisas fico com raiva, pensei que era só com os frameworks php (Symfony, Yii, CondeIgniter, Phalcon ……… wdf !!). Se Django já tem uma comunidade (bastante grande) e é um excelente framework, por que em vez de perder tempo reinventando a roda não entre para o time django. @ Lajto em sua conversa com o autor de wheezy.web por que você não pergunta? nunca pensei em entrar para o time de django, droga.

      1.    lajto dito

        Embora ambos sejam estruturas da web, eles têm abordagens muito diferentes. Django é pesado, tem muito código, enquanto wheezy.web é leve, está comprometido com a simplicidade e a otimização. Até onde sei, wheezy.web é a única estrutura da web Python verdadeiramente modular (ou seja, ela divide todo o seu código em diferentes partes que podem funcionar de forma independente). Possui muitas características que o diferenciam dos demais.

        Por que não entrar no Django, você diz? Porque Django foi projetado com abordagens completamente diferentes. Como você aplica um design modular ao Django? Teria que ser refeito praticamente do zero! O mesmo acontece com muitos outros problemas.

        Eu entendo o sentimento de "melhor uma única estrutura que funciona bem com uma grande comunidade", mas não é tão fácil. Então você entende, fazendo uma associação superficial, Django é como Debian e wheezy.web como ... Arch? Gentoo? É definitivamente um mau exemplo, mas acho que o xDDD é compreendido.

        Saudações!

  5.   Ulises dito

    Que tal Lajto, ei, estou fazendo um aplicativo e li a documentação do wheezy.web e é o primeiro framework web python que entendi da primeira vez 🙂 Veja, não tenho muito conhecimento de redes e da web, mas Tenho uma atração especial pela programação.
    Você poderia me ajudar a modificar o hello world para torná-lo um servidor público? Talvez seja uma pergunta muito boba, desculpe, mas não consigo encontrar na documentação como fazer isso.
    Outra pergunta, 😉 nos métodos get e post, como eu retorno informações que não são uma página html, eu retorno as informações como estão? como uma string ou uma lista ou qualquer tipo de dados. O cliente é um aplicativo no Android.

    1.    lajto dito

      Olá Ulises! Estou tão feliz que você esteja testando wheezy.web: D.

      Sobre o que você comenta, recomendo fortemente que você não monte sua própria estrutura. Aquele que Andriy monta é muito bom, então recomendo que você o siga. No artigo, há dois links para o blog de Andriy, onde ele explica as etapas com i18n e sem i18n. Caso seja um pouco confuso, explicarei como fazer isso sem i18n abaixo:

      Abra um terminal e execute estes quatro comandos (substitua "test-web" pelo nome da pasta que você deseja para seu projeto):

      wget https://bitbucket.org/akorn/wheezy.web/downloads/quickstart-empty.zip

      descompacte quickstart-empty.zip

      mv quickstart-empty test-web

      rm início rápido-empty.zip

      Se quiser usar PIL, modifique o arquivo setup.py e descomente o código correspondente. Quando estiver pronto, execute os três comandos a seguir:

      web-test-cd

      fazer env

      env / bin / easy_install uwsgi

      Seu servidor já está montado. Se você quiser fazer um benchmark rápido para ver se funciona, estando dentro da pasta, você executa:

      fazer um teste de referência da tampa do nariz

      Eu recomendo que você vá para "etc / development.ini" e altere "limit-as = 120" para "limit-as = 512". Esta é a quantidade de MB de RAM que o uWSGI irá "comer", portanto, pode ser aumentada se necessário no futuro.

      Por fim, toda vez que você quiser abrir seu servidor, basta localizar-se na pasta do projeto e executar:

      fazer uwsgi

      Nas outras questões… Por padrão, o servidor está programado para rodar no localhost. Se quiser torná-lo público, porque já o tem pronto e quer usá-lo em um servidor físico em produção, basta abrir "src / app.py" e localizar o seguinte: make_server (", 8080, main). O primeiro parâmetro é uma string vazia, certo? Bom, aí você coloca o IP do seu servidor. O segundo parâmetro é a porta que você deseja usar, que por padrão é 8080.

      Finalmente, o que você diz sobre retornar algo que não é HTML, é claro que você pode! Na documentação, eles explicam como devolver tudo: https://pythonhosted.org/wheezy.web/userguide.html#web-handlers

      Uma saudação! Qualquer coisa que você me diga;).

      1.    Ulises dito

        Muito obrigado Lajto, você realmente esclareceu minhas dúvidas, já tinha tentado com django mas como te disse não sou engenheiro de sistemas e django acho que traz muito mais do que eu precisava, use wheezy.web para testar uma aplicação em android e comunique-o com um servidor. Algo muito simples mas bastante rápido e prático. Ei, mais uma pergunta, recentemente vi que houve um grande problema com http / 2, como faço para saber em qual protocolo wheezy.web funciona? Posso fazer um servidor que usa http / 2 em wheezy.web? Ou me recomende um livro, blog, tutorial que esteja em blocos que possam explicar toda a questão das redes e comunicações. Agradeço novamente.

      2.    lajto dito

        Olá de novo Ulises ^^.

        HTTP / 2 é muito recente e não será adotado seriamente por mais 1 ano, então não se preocupe com isso :). Se você quer segurança, use HTTPS e pronto.

        Não tenho certeza do que o Wheezy Web usa para HTTP, então presumo que seja WSGI.

        Uma saudação!

  6.   lajto dito

    A propósito, um pouco de nada. Em algumas distros, uma mensagem de AVISO sobre .python-eggs aparece. Nada acontece se aparecer, mas se incomodar você, você pode removê-lo com:

    chmod go = ~ / .python-eggs

    Saudações!

  7.   Diego dito

    Estou usando Django, mas verificarei a documentação para ver como funciona. Obrigado por compartilhar. Felicidades

  8.   JD Villegas dito

    Pode ser usado no windows !!!, existe um tutorial?

    obrigado

  9.   Lalita dito

    Olá, temos muita experiência com Python. Parece-me que eles estão remando contra a corrente. A melhor coisa já inventada para essa linguagem é Django. Eles podem fazer uma estatística e consultar centenas de programadores de todo o mundo, isso vai te dar mais de 80%, a maioria não está errado. Se remarem ou nadarem contra a corrente, mais cedo ou mais tarde vão se afogar ...