Pergunta

A partir de Pypubsub:

O Pypubsub fornece uma maneira simples de seu aplicativo Python desacoplar seus componentes: partes do seu aplicativo podem publicar mensagens (com ou sem dados) e outras peças podem se inscrever/recebê -las. Isso permite que a mensagem "remetentes" e mestras "ouvintes" desconheça um do outro:

  • não se precisa importar o outro
  • Um remetente não precisa saber
    • "Quem" recebe as mensagens,
    • O que os ouvintes farão com os dados,
    • ou mesmo se algum ouvinte receberá os dados da mensagem.
  • Da mesma forma, os ouvintes não precisam se preocupar com a origem das mensagens.

Esta é uma ótima ferramenta para implementar uma arquitetura de visualização de visualização modelo ou qualquer arquitetura semelhante que promova a dissociação de seus componentes.

Parece haver alguns módulos Python para publicar/assinar flutuando na web, de Pypubsub, para Pydispatcher para classes simples "caseiras".

Existem vantagens e desvantagens específicas ao comparar diferentes módulos diferentes? Quais conjuntos de módulos foram comparados e comparados?

desde já, obrigado

Foi útil?

Solução

Pydispatcher é usado fortemente em Django E está funcionando perfeitamente para mim (e para toda a comunidade de Django, eu acho).

Pelo que me lembro, existem alguns problemas de desempenho:

  • Os argumentos que a verificação feita por Pydispatcher é lenta.
  • As conexões não utilizadas têm sobrecarga desnecessária.

AFAIK É muito improvável que você encontre esses problemas em um aplicativo de tamanho pequeno a médio. Portanto, esses problemas podem não se preocupar com você. Se você acha que precisa de cada quilo de desempenho (a otimização prematura é a raiz de todo o mal!), Você pode ver modificações feitas para Pydispatcher em Django.

Espero que isto ajude.

Outras dicas

O melhor pacote de despacho para Python parece ser o Módulo de expedição Django interno (chamado sinais na documentação). É independente do restante do Django e é curto, documentado, testado e muito bem escrito.

Editar: Eu biforei este projeto em um Projeto de sinal independente para python.

Eu recentemente olhei com cuidado para py-amqplib Atuar como um cliente AMQP em um corretor de RabbitMQ. A última ferramenta está escrita em Erlang.

Se você deseja dissipar seu aplicativo. Então, por que se unir ao idioma em si? Considere o uso de filas de mensagens que são neutras da linguagem e você realmente tem espaço para crescer!

Dito isto, o AMQP exige esforço para entender e pode ser mais do que você está disposto a assumir se o seu aplicativo. está funcionando muito bem como está. Ymmv.

Aqui está um mais novo: https://github.com/shaundancan/smokesignal. "A Smokesignal é uma biblioteca Python simples para enviar e receber sinais. Ele se inspira na estrutura de sinal do Django, mas é uma variante de uso geral." Exemplo:

from time import sleep
import smokesignal

@smokesignal.on('debug')
def verbose(val):
    print "#", val


def main():
    for i in range(100):
        if i and i%10==0:
            smokesignal.emit('debug', i)
        sleep(.1)

main()

Algumas bibliotecas que descobri que ainda não foram mencionadas:

Há também as bibliotecas de PJ Eby, governouspatch e The Peak Project, especialmente Trellis. Não sei qual é o status deles, mas a lista de discussão é bastante ativa.

Última versão do Trellis no Pypi

Trellis Doc

Eu também usei os componentes do Projeto Kamaelia da BBC. O Axon é uma abordagem interessante, mas mais componente do que inspirada no editor-consumidor. Bem, seu site não está atualizado ... Houve um projeto ou 2 no Google Soc 2008 e o trabalho está sendo feito.

Não sei se isso ajuda :)

Edit: Acabei de encontrar Py-não que é uma implementação "pouco ortodoxa" do padrão de observador. Tem a maioria das funcionalidades necessárias para minhas próprias ferramentas.

O fato de que o Pypubsub parece ser um projeto gerenciado um tanto caoticamente (o wiki no SF está morto, o site (outro wiki) vinculado ao SF está quebrado no momento) seria um motivo suficiente para eu não usá -lo. O Pydispatcher possui um site intacto, mas a única documentação que eles parecem fornecer é a da API gerada a partir dos Docstrings. Nenhum tráfego na lista de discussão também ... um mau sinal!

Como Mike também mencionou, é perfeitamente possível escolher uma solução independente do Python. Agora não me interpretem mal, eu amor Python, mas ainda assim, nesse campo, pode fazer sentido usar uma estrutura que é dissociada da linguagem de programação.

Não tenho experiência em mensagens, mas estou planejando dar uma olhada em algumas soluções. Até agora, esses dois projetos (gratuitos, de código aberto) parecem ser os mais promissores para mim (coincidentemente, ambos são projetos Apache):

Ambos parecem ser projetos razoavelmente amadurecidos, pelo menos como documentação e comunidade. Porém, não posso comentar a qualidade do software, como eu disse, não usei nenhum software.

QPID envia com bibliotecas de clientes para Python, mas você também pode usar py-amqplib. Para ActiveMQ, há PyactiveMq, que você pode usar para conectar -se via Stomp (protocolo de mensagens orientado para texto) ou via OpenWire.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top