0

我有一个程序(PatchDock),它从参数文件中获取输入,并生成一个输出文件。运行这个程序很费时间,我想缓存过去运行的结果,这样我就不需要两次运行相同的参数。

我能够将输入和输出文件解析为适当的数据结构。例如,输入文件被解析为类似字典的对象。输入键都是字符串,值是原始数据类型(整数、字符串和浮点数)。

我的方法

我的第一个想法是使用输入文件的 md5 哈希作为shelve数据库中的键。但是,这无法捕获具有完全相同输入的缓存文件,但输入文件中存在一些细微差别(注释、间距、参数顺序等)。

散列解析的参数对我来说似乎是最好的方法。但我能想到的从字典中获取唯一哈希的唯一方法是对排序的字符串表示进行哈希处理。

问题

散列参数字典的字符串表示似乎是实现我的最终目标的一种迂回方式 - 将唯一输入值键入到指定输出。有没有更直接的方法来实现这个缓存系统?

理想情况下,我希望在 Python 中实现这一目标。

4

2 回答 2

4

对已解析输入的排序表示进行散列处理实际上是最直接的方法,也是有意义的方法。你的直觉是正确的。

基本上,您正在对输入进行规范化(通过对其进行解析和排序),然后使用它来构造一个哈希键。

于 2012-08-19T05:40:15.677 回答
2

散列似乎是一种非常可行的方法,但自己这样做似乎有点过头了。为什么不使用输入元组作为字典的键?您不必自己担心散列和可能的冲突。您所要做的就是确定关键字参数的顺序(并根据您的要求为未设置的关键字添加一个标志对象)。

functools.lru_cache如果您使用的是 Python 3.2+,您也可能会发现它很有用。这是一个装饰器,它将为装饰函数的最后 n 次调用启用缓存。如果您使用的是旧版本,则有此功能的反向移植。

似乎还有一个具有类似目标的项目,称为FileDict,可能值得一看。

于 2012-08-19T11:08:10.043 回答