python2.7内存限制释放
我想要一个千兆字节的数据字符串 使用此代码python2.7内存限制释放,python,python-2.7,Python,Python 2.7,我想要一个千兆字节的数据字符串 使用此代码 length = 0x20000000 payload = ''.join(random.choice(string.printable) for _ in range(length)) 但是python排除并打印了这个错误“MemoryError” 完整错误消息: payload = ''.join(random.choice(string.printable) for _ in range(length)) MemoryError 我在堆栈溢
length = 0x20000000
payload = ''.join(random.choice(string.printable) for _ in range(length))
但是python排除并打印了这个错误“MemoryError”
完整错误消息:
payload = ''.join(random.choice(string.printable) for _ in range(length))
MemoryError
我在堆栈溢出中发现了这个例外情况
使用“导入系统,系统设置递归限制(10**6)”将修复它
所以,我添加了这个代码
但是没有解决
我不能“导入资源”。因为,无法安装..我认为您的最佳选择是使用
bytearray
:
barray = bytearray()
length = 0x20000000
for _ in range(length):
barray.append(random.choice(string.printable))
这在我的机器上只消耗了大约0.5千兆
注意,增加递归限制对您没有帮助,实际上您根本没有使用递归。你只是在做一些非常大的东西。仅仅是由''创建的列表
下面的指针数组。join
将需要大约0x20000000*8*1e-9==4.294967296
千兆字节,而这不包括列表
本身中的字符串,每个字符串都需要一个完整的python对象,即每个对象还需要大约40个字节,你看,你的内存刚刚用完。因此,考虑到您的单个字符串对象:
>>> 0x20000000 * (48) * 1e-9
25.769803776000003
所以你需要20多场演出!在一些现代笔记本电脑上是可行的,但8次肯定是不够的。啊。。你有一个很好的方法来创建多个stirng吗?你的系统有多少内存?我的笔记本电脑有8g!您的操作系统和python都安装了64位吗?是的!我的操作系统版本是windows 10 64位!任何直接可变的容器(所以不是列表)都可以工作。您的解决方案可能是最简单的。numpy阵列可以工作。很好,物理学家是的,
numpy.array
可以工作,但是bytearray
在Python 2中本质上是一个可变字符串,所以这可能是最合适的。我一点也不反对你。你的回答很好。