vaa*_*aab 7 python variables file
如果我们知道所有文件都将加载到内存中并且我们可以负担得起,那么在python变量中加载整个文件(可能是二进制文件)有什么缺点(如果有的话)或限制(如果有的话).如果这在技术上是可行的,那么应该避免这种情况,为什么?
关于文件大小问题,应该限制此解决方案的最大大小?为什么?
实际的加载代码可以是此stackoverflow条目中提出的代码.
示例代码是:
def file_get_contents(filename):
with open(filename) as f:
return f.read()
content = file_get_contents('/bin/kill')
... code manipulating 'content' ...
Run Code Online (Sandbox Code Playgroud)
[编辑]想到的代码操作(但可能不适用)是标准列表/字符串运算符(方括号,'+'符号)或一些字符串运算符('len','in'运算符,'count',' endswith'/'startswith','split','translation'...).
Len*_*bro 11
一般来说,有更好的方法可以做到这一点,但对于一次性脚本,你知道内存不是问题,当然.
虽然你得到了很好的回答,似乎没有人回答你问题的这一部分(正如你在一个问题中提出很多问题时经常发生的那样;)......:
关于文件大小问题,应该限制此解决方案的最大大小?为什么?
最重要的是,这个特定的Python进程实际使用了多少物理RAM (所谓的"工作集"),而不会过度惩罚整个系统性能的其他方面.如果你的"工作集"超过了物理RAM,那么你将进行分页和交换到磁盘,你的性能会迅速下降(直到所谓的"颠簸"状态基本上所有可用的周期都会进入获取页面进出的任务,实际工作量可以忽略不计.
除此之外,一个相当适度的数量(一般来说最多几MB)可能会被可执行代码(Python自己的可执行文件,DLL或.so)以及主动的字节码和一般支持数据结构所占用.在记忆中需要; 在一个没有做其他重要或紧急任务的典型现代机器上,与整体可用的数十亿字节相比,你几乎可以忽略这一开销(尽管嵌入式系统的情况可能不同等).
所有其余的都可用于您的数据 - 包括您正在读入内存的此文件,以及任何其他重要的数据结构.该文件的数据的"修改"一般需要(瞬时)的两倍尽可能多的内存文件的内容大小(如果你在一个串保持它) - 更多,当然,如果你保持的副本旧数据以及制作新修改的副本/版本.
因此,对于典型的现代32位机器上的"只读"使用,例如总体上2GB的RAM,读入内存(比方说)1.5 GB应该没问题; 但如果你正在进行"修改",那么它必须大大小于1 GB(如果你在内存中有其他重要的数据结构,那就更少了!).当然,与Python的64位构建,一个64位操作系统和16 GB的RAM,以前大不相同的实际限制在专用服务器上 - 大致比例千差万别的量实际上可用RAM.
例如,可以在此下载(解压缩)的King James'圣经文本大约是4.4 MB; 所以,在与2 GB RAM的机器,你可以保持它的约400略作修改的副本在内存中(如果没有其他请求存储器),但是,在一台机器16(可用和可寻址)GB的RAM,你可以保持超过3000份这样的副本.
| 归档时间: |
|
| 查看次数: |
8782 次 |
| 最近记录: |