函数的IIUC python哈希(例如在dict
中用作键)在运行期间不稳定。
是否可以使用莳萝之类的东西或其他库来获取在运行和不同计算机上稳定的函数的哈希值? (id
当然不稳定)。
答案 0 :(得分:1)
我是dill
的作者。我编写了一个名为klepto
的程序包,该程序包是分层缓存/数据库抽象,可用于跨并行/分布式资源的本地内存哈希和对象共享。它包含用于构建函数ID的多个选项。
请参阅klepto.keymaps
和klepto.crypto
来了解哈希选择-有些工作跨并行/分布式资源,有些则不能。选择之一是使用dill
或其他方式进行序列化。
klepto
与joblib
类似,但专门设计为在单个python会话之外具有对象永久性和共享性。可能与klepto
中的dask
类似。
答案 1 :(得分:0)
正如您提到的,id
在不同的进程中几乎肯定不会相同,尽管在不同的机器上肯定也不会相同。根据{{3}}:
id(对象): 返回对象的“身份”。这是一个整数 保证在此对象期间它是唯一且恒定的 一生。生命周期不重叠的两个对象可能具有相同的 id()值。
这意味着id
应该是不同的,因为由脚本的每个实例创建的对象都位于内存中的不同位置,并且不是同一对象。 id
定义身份,而不是代码块的校验和。
在执行脚本的不同实例上唯一一致的是函数的名称。
您可以使用确定性方法来识别脚本中的代码块的另一种方法是计算实际文本的校验和。但是控制方法内容应该由git等版本控制系统处理。如果您需要计算代码或代码的哈希总和,则可能是次优化。