我有一个程序(PatchDock),它从参数文件中获取输入,并生成一个输出文件。运行这个程序是耗时的,我想缓存过去运行的结果,这样我就不需要运行两次相同的参数了。
我能够将输入和输出文件解析为适当的数据结构。例如,输入文件被解析为类似字典的对象。输入键都是字符串,值是原始数据类型(整数,字符串和浮点数)。
我的第一个想法是使用输入文件的md5哈希作为shelve
数据库中的键。但是,这无法捕获具有完全相同输入的缓存文件,但输入文件(注释,间距,参数顺序等)略有不同。
散列解析的参数对我来说似乎是最好的方法。但我能想到从字典中获取唯一哈希的唯一方法是对已排序的字符串表示进行哈希处理。
散列参数字典的字符串表示似乎是实现我的最终目标的迂回方式 - 将唯一输入值键入指定输出。有没有更简单的方法来实现这个缓存系统?
理想情况下,我希望用Python实现这一目标。
答案 0 :(得分:4)
散列已解析输入的已排序表示实际上是执行此操作的最直接方式,也是有意义的方法。你的直觉是正确的。
基本上,您将输入规范化(通过解析并对其进行排序),然后使用它来构造散列键。
答案 1 :(得分:2)
如果您使用的是Python 3.2+,您也可能会发现functools.lru_cache
很有用。
这是一个装饰器,它将为装饰函数的最后n次调用启用缓存。
如果您使用的是旧版本,则会backports of this functionality out there。
此外,似乎有一个名为FileDict的类似目标的项目可能值得一看。