On 2012-10-10 11:03, Marco Beri wrote:
2012/10/10 Daniele Varrazzo <p...@develer.com>
On 2012-10-10 09:03, Marco De Paoli wrote:
Inoltre può esserti d'aiuto anche un occhiata al pattern Borg di
Alex
Martelli
Devo a questo cosiddetto pattern (è un'implementazione) le migliori
ore
della mia vita buttate in debug. Da non toccare neanche con una
pertica.
:-))
Cosa era successo? Più processi attivi? Race condition?
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.
È 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.
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?
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python