问题标签 [klepto]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
812 浏览

python - 选择性缓存/记忆的装饰器

我正在寻找一种构建装饰器的方法@memoize,我可以在如下函数中使用它:

然后,如果我这样做:

现在说我想强制缓存更新

在上面的结尾,我们总是有result4 = result3,但不一定result4 = result,这就是为什么需要一个选项来强制相同输入参数的缓存更新。

我该如何解决这个问题?

注意事项joblib

据我所知joblib支持.call,这会强制重新运行,但不会更新缓存

后续使用klepto

有没有办法让klepto(见@Wally的回答)默认将其结果缓存在特定位置?(例如/some/path/)并跨多个功能共享此位置?例如我想说

然后@memoize在同一路径下的给定模块中的几个函数。

0 投票
1 回答
4612 浏览

python - 使用 Klepto 进行 Python 保存和编辑

好的,所以我的问题非常具体,我提前道歉。我是一名新程序员,并尝试从头开始自己开发。它相对成功,只有我有最后一个问题,我可以看到。您可以在此处完整查看我的代码。

项目

所以我遇到的问题与我保存文件的方式有关。我第一次尝试腌制它,因为它是一本字典,但我一直收到错误,因为我的字典是
(名称,类)对。

我在这里四处搜索,发现我可以尝试 JSON 来做同样的事情。以同样的错误结束。最终我找到了 klepto 模块。我成功保存了我的字典并成功加载了它。直到后来我才发现我可以将新项目添加到文件中,但是每当我从我的字典中删除某些内容并保存时。下次我加载它。我删除的钥匙还在。

TLDR:可以将内容添加到我的 dict 并保存到 txt 文件,但是当我从 dict 中删除并保存时,它不会保存删除的密钥。

无论如何,我对我的问题出在我保存文件的方式或加载文件的方式或两者兼而有之感到困惑?任何帮助将不胜感激。

编辑:好的,我假设这是我当前设置为保存和加载的方式。

它在添加新项目时可以很好地保存字典,但是说我必须进行编辑并删除某些内容,然后保存并退出。下次加载它会有旧项目以及任何新项目。奇怪的是,我似乎在我的所有编辑中都破坏了一些东西。不保存新条目。

编辑2:

这就是我删除钥匙的方式。最初我使用的是 pop 方法,但是当它不保存更改时,我尝试了这个。请注意,它确实从字典中删除了它们的键、值,但保存和重新加载不会反映这种变化。

这就是我创建新键值对的方式。

已解决的编辑:

我的问题在于我从字典中删除它们的方式。以防以后有人偶然发现这里。看看@Mike Mckerns 的回答。不得不从存档字典中删除。

0 投票
1 回答
157 浏览

klepto - 如何使用 klepto 在磁盘上使用 LRU 缓存?

我正在尝试使用 klepto 进行 LRU 缓存。我想将缓存存储到磁盘,并且目前正在为此使用 klepto 的dir_archive选项。我编写了以下代码,主要基于 klepto 测试脚本中的代码:

此代码似乎可以正常工作,直到缓存到达maxsize. 此时,不再使用 LRU 删除单个项目,而是lru_cache清除整个缓存!下面是执行此操作的 klepto 源代码(https://github.com/uqfoundation/klepto/blob/master/klepto/safe.py):

所以我的问题是,为什么 klepto 会清除“归档”缓存?可以lru_cachedir_archive一起使用吗?

另外,如果我的代码看起来完全疯了,我真的很感激一些关于我应该如何编写它的示例代码,因为没有太多关于 klepto 的文档。

附加说明:我也尝试dir_archivecached=True. 当maxsize达到时,内存中的缓存仍然会被清除,但缓存的内容会在此时转储到归档缓存中。我有几个问题:

  1. 内存中的缓存只有在达到时才准确maxsize,此时它被擦除。
  2. 归档缓存不受maxsize. 每次maxsize内存缓存到达时,内存缓存中的所有项目都会转储到归档缓存中,无论有多少已经存在。
  3. 基于第 1 点和第 2 点,LRU 缓存似乎是不可能的。
0 投票
1 回答
88 浏览

python - klepto 缓存中参数的不同容忍度

我想为某个函数参数设置容差,但不为其他参数设置容差。假设我有这样的功能:

这些是预期的结果:

我尝试使用 tol 并忽略,但我没有得到我期望的结果:

我正在使用从 pip (klepto.__version__ 0.1.1) 安装的 klepto。我应该更改键盘映射吗?

0 投票
1 回答
171 浏览

python - 使用 klepto 通过函数名和参数进行缓存

我正在尝试使用 klepto 作为缓存,它会散列 args 和函数名称,这可能吗?

例如,所以使用 dir_cache 我将能够

并且对 func1(1, 2) 和 func2(1, 2) 的调用都会在 dir_archive 中产生单独的键

我错过了什么吗?

0 投票
0 回答
438 浏览

python - 如何使用 Klepto 包 Python

你好世界!

我有一个泡菜文件(包含字节形式的图像)要打开,但是当我用泡菜打开它时,我得到了这个错误:

有人告诉我改用 klepto。这是我的尝试,但是当我加载并尝试打印数据时,它会打印“无”

这是输出:

任何建议将不胜感激

0 投票
1 回答
63 浏览

python - klepto 中的过期缓存

我正在尝试使用klepto (v. 0.1.5.2) 来缓存一些非常繁重且耗时的计算。特别是,我使用lru_cache作为装饰器,再加上一个hdfdir_archive缓存存档。

我设法使用此答案中建议的purge=False选项将缓存内容保留在磁盘上,它就像一个魅力。无论如何,我会不时重新计算函数(即使使用相同的输入参数),因为某些计算是基于在一段时间后可能发生变化的数据。lru_cache

作为简单的解决方法,我认为当前日期可以包含在函数的输入参数中,实现一个自定义键映射来检查旧条目是否已过期;但我还没有找到如何自定义键盘映射的示例,所以我不知道这个解决方案是否可行或可行。

但是,我想知道在klepto. 换句话说,是否有在预设时间段后自动使缓存条目无效的选项或策略?

谢谢!

0 投票
1 回答
141 浏览

python - 如何快速从 Klepto 文件存档中删除多个项目?

我正在使用 Klepto 存档来索引文件夹树中的文件规范。扫描树后,我想快速删除对已删除文件的引用。但简单地从文件存档中逐一删除项目是非常缓慢的。有没有办法将更改同步到存档,或一次删除多个密钥?(“同步”方法似乎只添加新项目)

@Mike Mckerns 对这个问题的有用回答仅涉及删除单个项目: Python Saving and Editing with Klepto

使用 files.sync() 或 files.dump() 似乎只是从缓存中追加数据,而不是同步删除。有没有办法从缓存中删除密钥,然后一次性同步这些更改。个别删除太慢了。

这是一个工作示例:

0 投票
0 回答
132 浏览

python-3.x - 如何使用 klepto 持久化类实例

我正在尝试用 klepto 代替 shelve 来持久化类实例,但是在尝试这样做时看到了很长的回溯。

我的平台是:python 3.7.3 klepto 0.1.6

@Pickle 与在 Python 中存储大型字典的搁置示例 ......在上述平台上运行良好。

a.dump() 启动一个以 ... 开头的冗长回溯

并以...结束

0 投票
1 回答
96 浏览

klepto - klepto dir_archive 的密钥?

我创建了一个 klepto dir_archive。

在随后的存档访问中,如何在不将整个存档加载到内存的情况下确定存档密钥?