[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