我最近对算法感兴趣,并开始通过编写一个简单的实现,然后以各种方式优化它来探索它们.
我已经熟悉用于分析运行时的标准Python模块(对于大多数事情我已经发现IPython中的timeit魔术功能已足够),但我也对内存使用感兴趣,所以我也可以探索这些权衡(例如,缓存先前计算的值表的成本与根据需要重新计算它们的成本.是否有一个模块可以为我分析给定函数的内存使用情况?
如何从Python获取可用和当前使用的内存?它需要是跨平台的,至少可以在Windows,Mac OS X和Linux上运行.
我想在我的应用程序中向用户报告他没有足够的内存可以继续进行下一步操作.
我想知道在调用函数期间分配的最大RAM量是多少(在Python中).关于跟踪RAM使用的SO还有其他问题:
但是那些似乎允许你在heap()调用方法(在guppy的情况下)时更多地跟踪内存使用情况.但是,我想要跟踪的是外部库中的一个函数,我无法修改它,并且它会增长以使用大量的RAM,但是一旦函数执行完成就会释放它.有没有办法找出函数调用期间使用的RAM总量是多少?
假设我有一个像这样的多级字典
mydict = {
'first': {
'second': {
'third': {
'fourth': 'the end'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想像这样访问它
test = get_entry(mydict, 'first.second.third.fourth')
Run Code Online (Sandbox Code Playgroud)
到目前为止我所拥有的是什么
def get_entry(dict, keyspec):
keys = keyspec.split('.')
result = dict[keys[0]]
for key in keys[1:]:
result = dict[key]
return result
Run Code Online (Sandbox Code Playgroud)
有更有效的方法吗?根据%timeit,函数的运行时间是1.26us,而访问字典的标准方式是这样的
foo = mydict['first']['second']['third']['fourth']
Run Code Online (Sandbox Code Playgroud)
需要541ns.如果可能的话,我正在寻找将其修剪到800ns范围的方法.
谢谢
我已经发现了以下问题,但我想知道是否有一种更快更脏的方法来获取python解释器当前用于我的脚本而不依赖于外部库的内存量的估计.
我来自PHP并且为此目的使用了memory_get_usage()和memory_get_peak_usage(),我希望能找到一个等价物.
我注意到在迭代过程中迭代通过Pandas GroupBy对象时分配的内存不会被释放.我使用resource.getrusage(resource.RUSAGE_SELF).ru_maxrss(这篇文章的第二个答案中的详细信息)来测量Python进程使用的活动内存总量.
import resource
import gc
import pandas as pd
import numpy as np
i = np.random.choice(list(range(100)), 4000)
cols = list(range(int(2e4)))
df = pd.DataFrame(1, index=i, columns=cols)
gb = df.groupby(level=0)
# gb = list(gb)
for i in range(3):
print(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1e6)
for idx, x in enumerate(gb):
if idx == 0:
print(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1e6)
# del idx, x
# gc.collect()
Run Code Online (Sandbox Code Playgroud)
打印以下总活动内存(以gb为单位)
0.671732
1.297424
1.297952
1.923288
1.923288
2.548624
Run Code Online (Sandbox Code Playgroud)
取消注释del idx, x并gc.collect()修复问题.但是我必须del …
您是否了解了根据请求记录django应用程序内存使用情况的有效方法?
我有一个apache/mod_wsgi/django堆栈,它通常运行良好,但有时一个进程最终会占用大量内存.服务器最终缺少内存,交换很多,服务大大减慢.
这种情况很难修复,因为我不知道哪个请求会被归咎于此行为,我无法重现它.
我希望在生产中部署一些内容,在每次请求之前和之后记录进程的内存使用情况,并且开销最小.
在我开始重新发明轮子之前,我的同伴们的社区是否知道解决这个问题的任何现有解决方案?建议,中间件,片段或apache日志配置赞赏.
(我认为)我不需要的是:
我最接近的搜索结果:
python脚本如何知道它当前使用的系统内存量?(假设基于unix的操作系统)
我有一个非常大的json对象,我想将其转储到pickle文件中.有没有办法在使用时显示进度条pickle.dump?
python ×9
memory ×2
profiling ×2
apache ×1
dictionary ×1
django ×1
dump ×1
linux ×1
memory-leaks ×1
pandas ×1
pickle ×1
progress-bar ×1
python-2.7 ×1
python-3.x ×1
recursion ×1