quello che devo fare è questo:<div>in fase di inizializzazione devo caricare in memoria un grafo(networkx) di dimensioni consistenti: 60.000 nodi e più di 100.000 connessioni. PER ADESSO dovrebbe essere in sola lettura e se devo fare delle modifiche posso permettermi di stoppare tutto, fare le modifiche e rilanciare l'applicazione. </div>
<div>Poi in base alle richieste che vengono effettuate devo andare a leggere le informazioni che mi servono dal grafo, elaborarle e restituirle all'utente.</div><div><br><div class="gmail_quote">Il giorno 10 ottobre 2012 12:46, Daniele Varrazzo <span dir="ltr"><<a href="mailto:piro@develer.com" target="_blank">piro@develer.com</a>></span> ha scritto:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On 2012-10-10 11:03, Marco Beri wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2012/10/10 Daniele Varrazzo <<a href="mailto:piro@develer.com" target="_blank">piro@develer.com</a>><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 2012-10-10 09:03, Marco De Paoli wrote:<br>
<br>
 Inoltre può esserti d'aiuto anche un occhiata al pattern Borg di Alex<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Martelli<br>
<br>
</blockquote>
<br>
Devo a questo cosiddetto pattern (è un'implementazione) le migliori ore<br>
della mia vita buttate in debug. Da non toccare neanche con una pertica.<br>
</blockquote>
<br>
<br>
:-))<br>
<br>
Cosa era successo? Più processi attivi? Race condition?<br>
</blockquote>
<br></div>
Cosa deve succedere? Quello per cui è progettato: tu hai l'istanza di un oggetto, chiami qualche funzione apparentemente non correlata e alla riga dopo quell'istanza si comporta in maniera inconsistente da due righe prima. Anche un programma single-thread diventa imprevedibile.<br>

<br>
È solo una variabile globale glorificata, ma col rischio che nasconde il fatto di esserla. Molto meglio un singleton (il vero pattern di cui il borg è un'implementazione): almeno è esplicito che tutti ci possono mettere le mani e non fai assunzioni fuori luogo che sia una variabile locale.<br>

<br>
Per la storia, il programma in questione era Epydoc. Aggiungi il fatto che lo stato di questi oggetti veniva modificato in maniera casuale tra un run e l'altro, a seconda di che ordine venivano letti i sorgenti... È stato probabilmente il bug più ''.join(unsorted('aaacccozz')) che abbia mai trattato. Semplicemente perché un'istanza "ammalata" di borg non si comporta come un regolare oggetto Python: a is b == False, eppure cambi a e ti cambia anche b: un comportamento del tutto prevedibile no?<div class="HOEnZb">
<div class="h5"><br>
<br>
<br>
-- <br>
Daniele Varrazzo - Develer S.r.l.<br>
<a href="http://www.develer.com" target="_blank">http://www.develer.com</a><br>
______________________________<u></u>_________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it" target="_blank">Python@lists.python.it</a><br>
<a href="http://lists.python.it/mailman/listinfo/python" target="_blank">http://lists.python.it/<u></u>mailman/listinfo/python</a><br>
</div></div></blockquote></div><br></div>