[Python] Ottimizzare la lettura/scrittura di grossi blocchi di dati su file.
Giovanni Porcari
giovanni.porcari a softwell.it
Mar 25 Giu 2013 06:58:39 CEST
Il giorno 25/giu/2013, alle ore 01:37, Gollum1 <gollum1.smeagol1 a gmail.com> ha scritto:
> Ciao pyamici!
>
> il mio progetto sta andando avanti...
>
> ad ora procedo con la lettura di un file (tendenzialmente di
> grosse/grossissime dimensioni) con blocchi da 1MB o poco pių
> direttamente in memoria, dove poi procedo all'elaborazione, e scarico
> ogni blocco prima del caricamento del successivo in un file.
>
> il dubbio che mi sorge, č se in prospettiva, da prove che stanno
> effettuando alcuni amici che mi fanno da betatester, i blocchi singoli
> ottimali si dimostrano di dimensioni maggiori, come credete che possa
> essere gestita la cosa? procedere comunque per blocchi di 1MB e
> riversarlo direttamente nel file fino a raggiungere la dimensione di
> blocco ottimale per le lavorazioni successive?
>
> in questo caso, come mi consigliate di modificare il seguente blocco
> di programma?
>
> project.source_size = 0
> block_counter = 0
> block = {}
>
> while True:
> block[block_counter] = ib_file_data_support.Block(line_args,
> project, block_counter)
> block[block_counter].data = fi.read(project.BUFFER_SIZE)
>
> if not block[block_counter].data:
> block.pop(block_counter)
> break
>
> # Aggiungo la dimensione del blocco alla dimensione del file sorgente.
> project.source_size += len(block)
>
> # Eseguo tutte le altre operazioni sui blocchi/file.
>
> # ELimino il blocco di dati elaborato.
> block[block_counter].data = None
> # Incremento il contatore di blocco e leggo il prossimo blocco.
> block_counter += 1
>
>
> praticamente la seconda riga del ciclo while, in cui carico i dati
> leggendoli dal file, dovrebbe diventare a sua volta un ciclo while (o
> qualcosa di corrispettivo) che ad ogni ciclo legge un blocco da 1MB e
> lo riversa sul file indicato all'interno della classe blk... a questo
> punto credo che convenga mettere una funzione di load dentro la classe
> direttamente...
>
> che ne pensate? avete qualche suggerimento dettato dalla vostra esperienza?
>
Generatori ?
G
Maggiori informazioni sulla lista
Python