Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python2.7内存限制释放_Python_Python 2.7 - Fatal编程技术网

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中本质上是一个可变字符串,所以这可能是最合适的。我一点也不反对你。你的回答很好。