Stiamo progettando un'applicazione che dovrebbe monitorare un sistema per determinati eventi, inviare le parti interessate via e-mail per richiedere loro di intervenire quando pertinente e analizzare le loro risposte.
L'applicazione è composta da diversi thread che gestiscono parti separate (una per monitorare lo stato e l'invio di e-mail, un'altra per analizzare le risposte e aggiornare lo stato, ecc.).
Il flusso dell'applicazione dipende da diversi flag che vogliamo serializzare periodicamente e se l'applicazione fallisce, all'avvio è necessario caricare quei flag serializzati o se non viene trovato alcun file serializzato, per inizializzarli su un valore predefinito.
Come possiamo ottenere il massimo? Abbiamo lavorato su idee diverse, come ad esempio:
-
sovrascrive
@property
di Python e getter per salvare / caricare automaticamente quei flag ogni volta che vengono richiesti / modificati -
con un thread separato che serializza quei flag abbastanza spesso (come ogni minuto)
-
ogni thread ha cura di serializzare i flag che dipende da
Ciò che vogliamo evitare è un caso in cui il sistema intraprende un'azione, imposta alcuni flag come risultato e poi si blocca prima che tali modifiche siano serializzate.
Non possiamo usare un database e quindi ci siamo basati su cPickle
come protocollo di serializzazione.
Un altro problema derivante dal problema precedente è se tali flag devono essere mantenuti centralmente in un oggetto o distribuiti tra i diversi componenti che si basano su di essi.