2010-11-09 8 views
11

Come si svuota (o si ripristina) e riutilizzare un'istanza di hashlib.md5 in python? Se eseguo più operazioni di hashing in uno script, sembra inefficiente utilizzare ogni volta una nuova istanza di hashlib.md5, ma dalla documentazione di Python non vedo alcun modo per svuotare o ripristinare l'istanza.Come riutilizzare un'istanza di hashlib.md5

+1

Il benchmark la prossima volta prima di assumere la creazione di un oggetto minuscolo è "inefficiente". –

risposta

6

Perché pensi che sia inefficiente produrne uno nuovo? È un oggetto piccolo e gli oggetti vengono creati e distrutti tutto il tempo. Usane uno nuovo e non preoccuparti.

+1

Ci sono altri motivi che la velocità di riutilizzare un oggetto hashlib. Ad esempio, potresti ricevere l'oggetto hashlib (che potrebbe essere md5, sha1, ...) e vuoi riutilizzarlo per creare il checksum di più file. In tal caso, si potrebbe passare una lambda che creerà un nuovo oggetto hashlib quando viene chiamato, ma è ingombrante. –

-1

Ecco cosa ho fatto, basta scrivere un piccolo wrapper che reinizializza l'oggetto hash. Gestisce il clunkiness della scrittura del codice, ma forse non l'efficienza in fase di esecuzione.

def Hasher(object): 
    def __init__(self): 
     self.md5 = hashlib.md5() 

    def get_hash(self, o): 
     self.md5.update(o) 
     my_hash = self.md5.digest() 
     self.md5 = hashlib.md5() 
     return my_hash 
+0

ha, che non sta riutilizzando l'oggetto. Immagino che non ci sia un metodo 'reset' in questa api, quindi non è possibile riutilizzarlo? O esiste un valore che puoi passare al metodo' update' per resettare l'oggetto? – Gubatron