[Python] django e strutture dati permanenti
Daniele Varrazzo
piro a develer.com
Mer 10 Ott 2012 12:46:40 CEST
On 2012-10-10 11:03, Marco Beri wrote:
> 2012/10/10 Daniele Varrazzo <piro a 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
Maggiori informazioni sulla lista
Python