草庐IT

memoization

全部标签

python - 如何在 Python 中创建有界内存装饰器?

显然,快速搜索可以找到Python中内存装饰器的上百万种实现和风格。但是,我对一种我一直找不到的味道很感兴趣。我想让它的存储值的缓存可以是固定容量。添加新元素时,如果达到容量,则删除最旧的值并用最新值替换。我担心的是,如果我使用memoization来存储大量元素,那么程序会因为内存不足而崩溃。(我不知道这个问题在实践中有多重要。)如果缓存的大小是固定的,那么内存错误就不是问题。随着程序的执行,我处理的许多问题都会发生变化,因此初始缓存值与后来的缓存值看起来非常不同(并且以后出现的可能性要小得多)。这就是为什么我希望用最新的东西取代最旧的东西。我找到了OrderedDict类和一个示例

python - Pandas 内存

我有冗长的计算,我重复了很多次。因此,我想使用内存(如jug和joblib等包),与Pandas一致.问题是这个包是否能很好地内存PandasDataFrames作为方法参数。有人试过吗?有没有其他推荐的包/方法来做到这一点? 最佳答案 jug的作者在这里:jug工作正常。我刚刚尝试了以下方法并且有效:fromjugimportTaskGeneratorimportpandasaspdimportnumpyasnp@TaskGeneratordefgendata():returnpd.DataFrame(np.arange(3434

python - Python 中的持久内存

我有一个昂贵的函数,它接受并返回少量数据(一些整数和float)。我已经memoized这个功能,但我想让备忘录持久化。已经有几个与此相关的线程,但我不确定某些建议方法的潜在问题,并且我有一些相当具体的要求:我肯定会同时使用来自多个线程和进程的函数(同时使用multiprocessing和来自单独的python脚本)我不需要从这个python函数外部读取或写入备忘录我不太担心备忘录在极少数情况下被损坏(例如拔下插头或不小心写入文件而未锁定),因为重建并不昂贵(通常为10-20分钟),但我更希望它不会因为异常而损坏,或者手动终止python进程(我不知道这有多现实)我非常喜欢不需要大型外

python - Python 会实习生字符串吗?

在Java中,显式声明的字符串由JVM驻留,因此同一字符串的后续声明会导致两个指向同一字符串实例的指针,而不是两个单独(但相同)的字符串。例如:publicStringbaz(){Stringa="astring";returna;}publicStringbar(){Stringb="astring"returnb;}publicvoidmain(){Stringa=baz()Stringb=bar()assert(a==b)//passes}我的问题是,CPython(或任何其他Python运行时)是否对字符串做同样的事情?例如,如果我有一些类(class):classexampl

python - 如何内存 Django 模型对象的昂贵计算?

我的UserProfile对象上有几个包含JSON对象的TextField列。我还为每一列定义了一个setter/getter属性,它封装了将JSON序列化和反序列化为python数据结构的逻辑。此数据的性质确保它会在单个请求中被View和模板逻辑多次访问。为了节省反序列化成本,我想在读取时记住python数据结构,在直接写入属性时失效或从模型对象保存信号。我在哪里/如何存储备忘录?我对使用实例变量感到紧张,因为我不了解查询实例化任何特定UserProfile背后的魔力。__init__使用安全吗?还是我需要在每次读取时通过hasattr()检查memo属性是否存在?这是我当前实现的一

python - 如何内存 Django 模型对象的昂贵计算?

我的UserProfile对象上有几个包含JSON对象的TextField列。我还为每一列定义了一个setter/getter属性,它封装了将JSON序列化和反序列化为python数据结构的逻辑。此数据的性质确保它会在单个请求中被View和模板逻辑多次访问。为了节省反序列化成本,我想在读取时记住python数据结构,在直接写入属性时失效或从模型对象保存信号。我在哪里/如何存储备忘录?我对使用实例变量感到紧张,因为我不了解查询实例化任何特定UserProfile背后的魔力。__init__使用安全吗?还是我需要在每次读取时通过hasattr()检查memo属性是否存在?这是我当前实现的一

c# - 线程安全的内存

我们以WesDyer's为例以函数内存为起点的方法:publicstaticFuncMemoize(thisFuncf){varmap=newDictionary();returna=>{Rvalue;if(map.TryGetValue(a,outvalue))returnvalue;value=f(a);map.Add(a,value);returnvalue;};}问题是,当从多个线程使用它时,我们会遇到麻烦:Funcf=...varf1=f.Memoize();...inthread1:vary1=f1(1);inthread2:vary2=f1(1);//Wemayberec

c# - 线程安全的内存

我们以WesDyer's为例以函数内存为起点的方法:publicstaticFuncMemoize(thisFuncf){varmap=newDictionary();returna=>{Rvalue;if(map.TryGetValue(a,outvalue))returnvalue;value=f(a);map.Add(a,value);returnvalue;};}问题是,当从多个线程使用它时,我们会遇到麻烦:Funcf=...varf1=f.Memoize();...inthread1:vary1=f1(1);inthread2:vary2=f1(1);//Wemayberec

C# 内存具有任意数量参数的函数

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。关闭4年前。这个问题是由于打字错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。编辑问题以包含desiredbehavior,aspecificproblemorerror,andtheshortestcodenecessarytoreproducetheproblem.这将有助于其他人回答问题。Improvethisquestion我正在尝试为具有任意数量参数的函数创建一个内存接口(interface),但是我惨败我觉得我的解

C# 内存具有任意数量参数的函数

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。关闭4年前。这个问题是由于打字错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。编辑问题以包含desiredbehavior,aspecificproblemorerror,andtheshortestcodenecessarytoreproducetheproblem.这将有助于其他人回答问题。Improvethisquestion我正在尝试为具有任意数量参数的函数创建一个内存接口(interface),但是我惨败我觉得我的解