Qual è il modo preferito di comunicare tra le applicazioni sullo stesso sistema?

4

Sto progettando un sistema che è costruito su diverse piccole applicazioni scritte in python, alcuni di questi saranno servizi e altri saranno programmi che vengono eseguiti solo in situazioni speciali. Quello che devo raggiungere è lasciare che il server comunichi a un servizio quando si verifica un determinato evento con una piccola quantità di dati. In modo che il servizio sia a conoscenza della nuova situazione e possa intraprendere le azioni appropriate, a volte immediatamente ea volte in futuro.

Ho guardato memcached, ma sembra una soluzione di overkill per il mio sistema (che è solo alcune applicazioni separate che girano su un Raspberry Pi), o che scrive su file e usa qualcosa come pyinotify ma non penso che sia molto elegante e alla fine ho pensato di memorizzare lo stato in un database che anch'io non mi piace molto tanto.

Esistono modi preferiti per gestire questo tipo di comunicazione tra processi che non ho pensato (sono sicuro che ci sia) o quale dei suddetti sarebbe il più intelligente da seguire?

    
posta Daniel Figueroa 01.03.2013 - 15:55
fonte

3 risposte

2

A mia conoscenza, l'unico standard per tecnologie specifiche è "qualunque cosa funzioni per le tue esigenze".

Detto questo, potresti voler esaminare Redis . L'ho usato prima per comunicare tra sistemi diversi e funziona bene.

In sostanza, cos'è un datastore in memoria. Puoi impostare il servizio in modo che guardi per una chiave specifica e quando il tuo sistema fa qualcosa con quella chiave guardata, il servizio reagisce.

In un senso più generale, ciò che stai chiedendo è spesso noto come installazione "pub-sub" (editore-abbonato). Quindi, se Redis non funziona per te, potresti essere in grado di usare il termine più generico per trovare una soluzione che funzioni. E davvero, se lo volessi, potresti sfruttare Twitter come intermediario, se lo volessi davvero (il sistema pubblicherebbe un tweet e il servizio guarderebbe il feed di Twitter per gli aggiornamenti). Se ricordo male, GitHub usa Hubot e Campfire in un modo simile (Hubot siede in una stanza di chat di Campfire, in attesa che qualcuno invii comandi, a cui Hubot risponde).

    
risposta data 01.03.2013 - 16:07
fonte
2

L'input standard e l'output standard sembrano essere la semplice risposta trascurata (o forse non sto capendo il problema) . Per chiunque stia leggendo questo, stdin e stdout è il modo più semplice per comunicare tra due applicazioni.

L'applicazione principale può generare un processo diverso e inviare messaggi attraverso stdin e stdout. È semplice, diretto e veloce. Tuttavia, devi comunicare con un protocollo per i due processi. Se i messaggi sono semplici, trovare questo "protocollo" è banale.

Non sono un esperto di python ma so che è possibile creare sottoprocessi e reindirizzare l'input standard e l'output standard del sottoprocesso all'applicazione principale. link

    
risposta data 13.06.2016 - 06:50
fonte
0

Non è necessario utilizzare un servizio esterno, puoi utilizzare le socket .
Almeno se hai comunicazioni one-to-one, se ci sono molti ascoltatori per determinati eventi, una soluzione pub-sub, come raccomandato da @Shauna, potrebbe essere migliore.

per una panoramica sui socket e il loro uso in Python vedi i documenti

    
risposta data 01.03.2013 - 20:37
fonte

Leggi altre domande sui tag