- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试在 Python3 中使用 lru_cache
来加速对我们的 Salesforce 数据库的常见查询。以下是应该的相关代码
当我尝试这段代码时,缓存用于调用不带参数的函数,但它似乎不缓存带参数的函数调用。另外,我不确定如何为装饰函数订购装饰器。
请注意,我在这里使用了一个带有类和静态方法的类,因此我可以为 Resource
的不同子类覆盖 get
和 get_all
方法>。
请解释我做错了什么或者可以做得更好。
from functools import lru_cache
from functools import wraps
class Resource(object):
def hash_dict(func):
"""Transform mutable dictionnary
Into immutable
Useful to be compatible with cache
"""
class HDict(dict):
def __hash__(self):
return hash(frozenset(self.items()))
@wraps(func)
def wrapped(*args, **kwargs):
args = tuple([HDict(arg) if isinstance(arg, dict) else arg for arg in args])
kwargs = {}
for k, v in kwargs.items():
if isinstance(v, dict):
kwargs[k] = HDict(v)
elif isinstance(v, list):
kwargs[k] = tuple(v)
else:
kwargs[k] = v
return func(*args, **kwargs)
return wrapped
@staticmethod
@hash_dict
@lru_cache
def get(cls, resource_id, lang='en', fields=None):
pass
@classmethod
@hash_dict
@lru_cache
def get_all(cls, lang='en', filters=None, fields=None):
pass
最佳答案
不需要额外的包。以下工作按预期进行:
import functools
class A:
@staticmethod
@functools.lru_cache(maxsize=None)
def build(value):
print('Creating', value)
return A()
assert A.build('a') is A.build('a')
assert A.build('b') is A.build('b')
assert A.build('b') is not A.build('a')
从 python 3.9 开始,您可以将 @functools.lru_cache(maxsize=None)
替换为 @functools.cache
。
关于python - 为类和静态方法配置lru_cache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46544940/
如何配置lru_cache根据接收到的实际值而不是如何调用函数来键入其缓存? >>> from functools import lru_cache >>> @lru_cache ... def f(
在运行下面的代码时,我收到 Python 无法导入 lru_cache 的错误。但是,每次导入(数学等)都会发生这种情况。我已经尝试了我可以在互联网上找到的每一个教程来尝试让这个东西工作。我已经重新安
我知道 cache_clear。但是我想知道如何清除单个调用的缓存。看到 cache_clear 不接受参数,我认为唯一的方法是直接弄乱底层字典。会有什么副作用(如果有的话)? 我们的目标是实现以下目
在 Python3 的 functools 包中,有一个 lru_cache() 装饰器可以内存您的函数调用。 有没有办法让我将这个缓存转储到一个文件中,然后再将文件加载回内存中? 我在 functo
我有一个带有方法/属性 multiplier 的对象。这个方法在我的程序中被多次调用,所以我决定在它上面使用lru_cache()来提高执行速度。正如预期的那样,它要快得多: 下面的代码显示了问题:
我试图了解 python (3) 中 lru_cache decorator 的实现,特别是它如何从函数 创建 key args 为其内部 dict。 我一直在读这篇文章https://github.
我正在尝试为一些计算科学代码组合数据类、属性和 lru_caches: from dataclasses import dataclass from typing import Any from fu
我在使用 django 应用程序的日志中收到此错误。我认为使用 Python 2.x 时会发生此类错误,但在我的虚拟环境中会发生 Python - 3.6.5 . Django - 2.0.7 .带有
根据documentation lru_cache 的默认值来自 functools是 128。但是没有定义单位。 Decorator to wrap a function with a memoiz
我在 Windows 上使用 Python 3.7 运行每个代码时都会发生此错误: Traceback (most recent call last): File "test.py", line
我有一个像这样的 Python 单调度通用函数: @singledispatch def cluster(documents, n_clusters=8, min_docs=None, depth=2
是否可以在项目被逐出时为 functools.lru_cache 定义回调?在回调中,缓存的值也应该存在。 如果没有,也许有人知道支持逐出和回调的轻量级类字典缓存? 最佳答案 我将发布我使用的解决方案
我想要一个可以使用 functools.lru_cache 的函数,但默认情况下不能。我正在寻找一种方法来使用可用于禁用 lru_cache 的函数参数。目前,我有两个版本的函数,一个有 lru_ca
这个问题在这里已经有了答案: How do I use cache_clear() on python @functools.lru_cache (3 个答案) 关闭 6 年前。 有什么方法可以覆盖
在评论中:Is there a decorator to simply cache function return values? @gerrit 指出了将可变但可散列的对象用于带有 functool
是否可以使用 functools.lru_cache 来缓存由 functools.partial 创建的部分函数? 我的问题是一个函数,该函数采用可散列参数和常量、不可散列对象(例如 NumPy 数
我有一个将(以及其他)字典作为参数的方法。该方法是解析字符串,字典提供了一些子字符串的替换,所以它不必是可变的。 这个函数经常被调用,而且在冗余元素上,所以我认为缓存它会提高它的效率。 但是,正如您可
这是我要通过缓存增强的功能的框架,因为执行RPC(远程过程调用)涉及到其他主机的TCP连接。 def rpc(rpc_server, rpc_func, arg): return rpc_se
这是我的情况,is_exist功能有性能问题。 def is_exist(link :str) -> bool: if query_db(link) is True: ret
作为并行化一些现有代码(使用多处理)的一部分,我遇到了类似于下面类的东西需要被 pickle 的情况。 从...开始: import pickle from functools import lru_
我是一名优秀的程序员,十分优秀!