[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