[Python] Aggiornare file pickle

Filadelfo Fiamma philosganga a gmail.com
Lun 16 Maggio 2011 16:28:56 CEST


Ciao ragazzi,
Vi ricontatto in merito alla discussione che ho aperto il 10 maggio.
Ricapitolando in breve, mi sono interessato nella gestione
incrementale dei file pickle, facendo in modo che il salvataggio
dell'intero oggetto non avvenga ad ogni dump(), ma che vada ad
interessare  solo la parte da aggiungere. In questo modo vengono
creati N file pickle che sono raggruppati alla fine del processo,
oppure su richiesta, in un unico file pickle.
Ho effettuato svariate prove, verificando il funzionamento del
processo, in particolar modo la correttezza delle informazioni: in
effetti cosi è.
L'unica anomalia che ho riscontrato è la dimensione del pickle: il
pickle creato dal raggruppamento di tutti i pickle di aggiornamento,
ha una dimensione maggiore rispetto a quanto aspettato (Il paragone è
stato fatto con la dimensione di un file pickle generato senza
gestione incrementale, in modo classico).
Premetto che non mi sono minimamente fidato di ricostruire "a mano"
l'oggetto, con il copia incolla dei pkl a livello testuale, bensì ho
ricostruito in memoria l'oggetto, che è un dizionario, ed ho
effettuato il dump finale.
Analizzando il contenuto testuale del pickle, ho notato l'aggiunta di
diverse righe (g5,g6,g7 ecc) ripetute per ogni chiave del dizionario.
Ho inoltre notato che, utilizzando tipi di dato semplice, non è
presente questa differenza nella dimensione.
Da cosa può dipendere questa anomalia, se di anomalia si tratta?

Grazie mille
Buon pomeriggio a tutti

FF

>Il 10 maggio 2011 17:17, Filadelfo Fiamma <philosganga a gmail.com> ha scritto:
> Ringrazio tutti quanti :)
> Mi permetto di descrivere brevemente ciò che ho sperimentato, seppur
> esso non sia generica come applicazione, ma riesce a gestire oggetti
> fatti in questo modo: {key:[]}, nel mio caso è un log per gli accessi
> effettuati su di un certo file, ordinati cronologicamente.
>
> La classica dump() va a ricreare il mio log.pkl ogni qualvolta si
> effettua un accesso.
> La dump() modificata invece crea un file log_X.pkl, con X
> incrementale, che contiene solo l'accesso appena effettuato.
>
> La load() modificata dunque tiene di tutti i file log_X e li raggruppa
> per ottenere l'intero oggetto, in più si occupa anche di eliminare
> tutti i file log_X e di riunire tutta l'informazione in un unico file
> pkl, considerando che quest'azione avviene solo in fase di
> inizializzazione, ho ritenuto che fosse tollerabile rallentare questa
> fase per poter essere veloci nelle dump(), magari sarebbe opportuno
> effettuare questo raggruppamento ogni qualvolta si raggiunga un certo
> numero di file log_X.
>
> Ho effettuato il profiling inserendo 2000 volte la chiave 'pippo',
> avente come valore un indice incrementale.
> La dump() classica il computer ha impiegato 27.321 secondi
> La dump() modificata invece ha impiegato 4.114 secondi
>
> Buona serata a tutti
>


Maggiori informazioni sulla lista Python