2015-12-16 15 views

risposta

9

Caching è un approccio tipico per accelerare le operazioni di lunga durata. Sacrifica la memoria per il bene della velocità computazionale.

Supponiamo che tu abbia una funzione che, dato un insieme di parametri, restituisce sempre lo stesso risultato. Sfortunatamente questa funzione è molto lenta e devi chiamarla una quantità considerevole di volte per rallentare il tuo programma.

Cosa si può fare, è memorizzare un numero limitato di {parametri: risultato} combinazioni e saltare la propria logica ogni volta che la funzione viene chiamata con gli stessi parametri.

È un trucco sporco ma piuttosto efficace soprattutto se la combinazione dei parametri è bassa rispetto alla velocità della funzione.

In Python 3 c'è uno decorator per questo scopo.
In Python 2 a library può essere d'aiuto ma è necessario un po 'più di lavoro.

3

AlignmentFile prende come primo argomento:

filepath_or_object

Così, invece di fornire un nome di file, è possibile fornire un oggetto che supporta un'interfaccia simile a file, vale a dire i metodi seek, read , tell. Quando si implementa una classe per questo, è anche possibile implementare il caching sulle letture, che ovviamente devono dipendere dalla posizione corrente del cursore.

Se la dimensione del file è abbastanza piccolo in modo che si inserisce in memoria, è possibile leggere il file completo e operare su un oggetto io.BytesIO, non c'è bisogno di fare la propria classe:

data = io.BytesIO(open('datafile','rb').read()) 
your_object = AlignmentFile(data, <other args>) 

Non sono sicuro che questo accelererò molto le cose, perché presumo che i moderni sistemi operativi (so che Linux lo farà) accedano ai file in cache. Quindi forse è sufficiente fare affidamento su questo.

Problemi correlati