Domanda

Da PyPubSub :

  

Pypubsub fornisce un modo semplice per   l'applicazione Python da disaccoppiare   i suoi componenti: parti del tuo   l'applicazione può pubblicare messaggi (con   o senza dati) e altre parti possono   iscriviti / riceverli. Questo permette   messaggio " mittenti " e messaggio   & Quot; ascoltatori " essere ignaro di ciascuno   altri:

     
      
  • uno non ha bisogno di importare l'altro
  •   
  • un mittente non ha bisogno di sapere      
        
    • " che " riceve i messaggi,
    •   
    • cosa faranno gli ascoltatori con i dati,
    •   
    • o anche se qualsiasi ascoltatore riceverà i dati del messaggio.
    •   
  •   
  • allo stesso modo, gli ascoltatori non devono preoccuparsi della provenienza dei messaggi.
  •   
     

Questo è un ottimo strumento per l'implementazione   un'architettura Model-View-Controller   o qualsiasi architettura simile che   promuove il disaccoppiamento dei suoi componenti.

Sembra che ci siano alcuni moduli Python per la pubblicazione / iscrizione fluttuanti sul Web, da PyPubSub, a PyDispatcher a semplice " cucinato in casa " classi.

Ci sono vantaggi e svantaggi specifici quando si confrontano diversi moduli diversi? Quali set di moduli sono stati confrontati e confrontati?

Grazie in anticipo

È stato utile?

Soluzione

PyDispatcher è ampiamente utilizzato in Django e funziona perfettamente per me (e per tutta la comunità Django, immagino).

Come ricordo, ci sono alcuni problemi di prestazioni:

  • Il controllo degli argomenti effettuato da PyDispatcher è lento.
  • Le connessioni non utilizzate hanno un sovraccarico non necessario.

AFAIK è molto improbabile che si verifichino questi problemi in un'applicazione di dimensioni medio-piccole. Quindi questi problemi potrebbero non interessarti. Se pensi di aver bisogno di ogni chilo di prestazioni (l'ottimizzazione prematura è la radice di tutto il male!), Puoi guardare le modifiche apportate a PyDispatcher in Django.

Spero che questo aiuti.

Altri suggerimenti

Il miglior pacchetto di spedizione per Python sembra essere il modulo di spedizione inside django (chiamato segnali nella documentazione). È indipendente dal resto del django ed è breve, documentato, testato e scritto molto bene.

Modifica: ho convertito questo progetto in un progetto di segnale indipendente per Python.

Di recente ho esaminato attentamente py-amqplib per fungere da client AMQP per un Broker RabbitMQ. Quest'ultimo strumento è scritto in Erlang.

Se stai cercando di disaccoppiare la tua app. allora perché associarlo alla lingua stessa? Prendi in considerazione l'uso di code di messaggi che sono neutre dal punto di vista linguistico e quindi hai davvero spazio per crescere!

Detto questo, AMQP si impegna a capire e potrebbe essere più di quanto tu sia disposto ad accettare se la tua app. sta funzionando bene così com'è. YMMV.

Eccone uno nuovo: https://github.com/shaunduncan/smokesignal . " smokesignal è una semplice libreria Python per inviare e ricevere segnali. Trae ispirazione dal framework del segnale django ma è inteso come una variante di uso generale. " Esempio:

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()

Alcune librerie che ho trovato che non sono ancora state menzionate:

Esistono anche le librerie di PJ Eby, RuleDispatch e il progetto PEAK, in particolare Trellis. Non so quale sia il loro stato in realtà, ma la mailing list è abbastanza attiva.

Ultima versione di Trellis su PyPi

Trellis doc

Ho anche usato i componenti del progetto Kamaelia della BBC. Axon è un approccio interessante, ma più componente di ispirazione editore-consumatore. Bene, il suo sito web non è per nulla aggiornato ... C'è stato un progetto o 2 nel SoC di Google 2008 e il lavoro è in corso.

Non so se aiuta :)

Modifica: ho appena trovato Py-notification che è un " non ortodosso " implementazione del modello Observer. Ha la maggior parte delle funzionalità di cui ho bisogno per i miei strumenti.

Il solo fatto che PyPubSub sembra essere un progetto gestito in qualche modo caotico (il Wiki su SF è morto, il sito Web (un altro Wiki) che è collegato su SF è attualmente rotto) sarebbe una ragione sufficiente per non usarlo. PyDispatcher ha un sito Web intatto, ma l'unica documentazione che sembrano fornire è quella per l'API generata dai documenti. Nessun traffico sulla mailing list o ... un brutto segno!

Come menzionato anche da Mike, è perfettamente possibile scegliere una soluzione indipendente da Python. Ora non fraintendetemi, amo Python, ma in questo campo può avere senso usare un framework disaccoppiato dal linguaggio di programmazione.

Non ho esperienza con la messaggistica, ma sto pensando di dare un'occhiata ad alcune soluzioni. Finora questi due progetti (gratuiti, open source) sembrano essere i più promettenti per me (per coincidenza, entrambi sono progetti Apache):

Entrambi sembrano essere progetti abbastanza maturi, almeno per quanto riguarda la documentazione e la comunità. Non posso commentare la qualità del software, tuttavia, come ho detto, non ho usato nessuno dei software.

Qpid viene fornito con librerie client per Python, ma puoi anche utilizzare py-amqplib . Per ActiveMQ c'è pyactivemq , che puoi utilizzare per connetterti tramite STOMP (Streaming di messaggi orientati al testo Protocollo) o tramite Openwire.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top