爲什麼不只是基準呢?
>>> def sha1(s):
... return hashlib.sha1(s).hexdigest()
...
>>> def sha512(s):
... return hashlib.sha512(s).hexdigest()
...
>>> t1 = timeit.Timer("sha1('asdf' * 100)", "from __main__ import sha1")
>>> t512 = timeit.Timer("sha512('asdf' * 100)", "from __main__ import sha512")
>>> t1.timeit()
3.2463729381561279
>>> t512.timeit()
6.5079669952392578
所以我的機器上,hash512
是兩倍的時間sha1
。但正如GregS所說,爲什麼要使用安全散列進行緩存?嘗試內置的散列算法應該是非常快和調整:
>>> s = "asdf"
>>> hash(s)
-618826466
>>> s = "xxx"
>>> hash(s)
943435
>>> hash("xxx")
943435
或者更好的是,使用內置的Python字典。也許你可以告訴我們更多關於你計劃緩存的內容。
編輯: 我想,你正在努力實現這樣的事情:
hash = hashlib.sha1(object_to_cache_as_string).hexdigest()
cache[hash] = object_to_cache
我被「使用內置的Python dictinoaries」 refferring到是可以簡化上述:
cache[object_to_cache_as_string] = object_to_cache
通過這種方式,Python負責散列,因此您不必!
關於你的特殊問題,你可以參考Python hashable dicts爲了使字典可散列。然後,所有你需要做緩存的對象是:
cache[object_to_cache] = object_to_cache
如果是緩存,爲什麼你需要一個安全的哈希? –
當你嘗試不同的方法並測量他們的表現時,你發現了什麼? –
@GregHewgill可能是想說的是,有一個方便的標準庫模塊'timeit',它使得這種測量變得如此簡單,以至於只需要花費時間就可以比詢問它更容易,尤其是當它從命令行運行時。 –