[Python] Ottimizzare la lettura/scrittura di grossi blocchi di dati su file.

Gollum1 gollum1.smeagol1 a gmail.com
Mar 25 Giu 2013 01:37:03 CEST


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?

Byez
--
Gollum1
Tesssssoro, dov'é il mio tessssoro...


Maggiori informazioni sulla lista Python