缓存时间密集型操作的结果

2024-10-03 04:28:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我能够将输入和输出文件解析为适当的数据结构。例如,输入文件被解析为类似字典的对象。输入键都是字符串,值是基本数据类型(int、strings和float)。你知道吗

我的方法

我的第一个想法是使用输入文件的md5散列作为^{}数据库中的键。但是,这无法捕获具有完全相同输入的缓存文件,但在输入文件中存在一些细微的差异(注释、间距、参数顺序等)。你知道吗

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

问题

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

理想情况下,我希望用Python实现这一点。你知道吗


Tags: 文件对象方法字符串程序数据结构参数字典
2条回答

散列已解析输入的排序表示实际上是最直接的方法,也是最有意义的方法。你的直觉是对的。你知道吗

基本上,您正在规范化输入(通过解析和排序),然后使用它来构造哈希键。你知道吗

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

如果您使用的是python3.2+,那么也可能会发现^{}很有用。 这是一个decorator,它将为修饰函数的最后n个调用启用缓存。 如果您使用的是旧版本,则有backports of this functionality out there。你知道吗

此外,似乎还有一个类似的项目,名为FileDict,可能值得一看。你知道吗

相关问题 更多 >