gpt4 book ai didi

python - 散列大型任意对象的最快方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:56 25 4
gpt4 key购买 nike

我正在编写一个方法来生成用于缓存函数结果的缓存键,该键基于函数名和参数哈希值的组合。

目前我正在使用 hashlib 对参数的序列化版本进行哈希处理,但是序列化大对象的操作非常昂贵,那么有什么选择呢?

#get the cache key for storage
def cache_get_key(*args):
import hashlib
serialise = []
for arg in args:
serialise.append(str(arg))
key = hashlib.md5("".join(serialise)).hexdigest()
return key

更新:我尝试使用 hash(str(args)),但是如果 args 中的数据比较大,计算哈希值仍然需要很长时间。有什么更好的方法吗?

实际上,大数据的 str(args) 需要很长时间...

最佳答案

假设您创建了对象,并且它由较小的组件组​​成(它不是二进制 blob),您可以在构建对象时使用其子组件的哈希值预先计算哈希值。

例如,不是serialize(repr(arg)),而是arg.precomputedHash if isinstance(arg, ...) else serialize(repr(arg))

如果您既不创建自己的对象也不使用hashable 对象,您或许可以保留对象引用的内存表-> 哈希,假设您不改变对象。最坏的情况是,您可以使用允许内存的函数式语言,因为这种语言中的所有对象可能都是不可变的,因此是可哈希的。

关于python - 散列大型任意对象的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10097064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com