python - 字典变量的 MemoryError

标签 python python-2.7

我在第 3 轮 nfind(while 循环)中执行的代码有什么问题,返回符合 CACHE[sha] = number 的 MemoryError? 在系统上有足够的内存,并且在 while 循环的每一端我都清除分配的内存,但它在第 3 次通过 while 循环运行时返回错误。 如果您运行这些代码,在某些情况下,我认为有必要将 XRAN= 2**23 更改为更大或更小的指数(一或两个),以产生错误。 请帮助和建议。

from multiprocessing import Pool
from hashlib import sha256
from struct import pack
import gc

XRAN= 2**23

def compsha(number):
    return number, sha256(pack("Q", number)).digest()

if __name__ == '__main__':
    gc.enable()
    nfind = 1
    while (nfind > 0):
        print(nfind)
        CACHE = {}
        pool = Pool()
        for i, output in  enumerate(pool.imap_unordered(compsha, xrange((nfind-1)*XRAN, nfind*XRAN), 2)):
            number, sha = output
            CACHE[sha] = number
        pool.close()
        pool.join()
        if nfind != 0 :
            nfind = nfind + 1
        del CACHE
=======================================================
>>> 
1
2

Traceback (most recent call last):
  File "D:\Python27\free_pool.py", line 20, in <module>
    CACHE[sha] = number
MemoryError

最佳答案

除了 Ned 关于在您甚至不使用的字典中存储太多内容的回答之外,您是否有可能在 32 位 python 解释器上运行并在主进程中达到 4GB 内存限制?

$ python -c "import sys; print sys.maxint" // 64-bit python
9223372036854775807

$ python-32 -c "import sys; print sys.maxint" // 32-bit
2147483647

在 Windows 上,32 位进程可能限制在 2-4GB 之间

关于python - 字典变量的 MemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10573580/

相关文章:

python - 如何允许从所有目录访问文件?

python - Pandas 使用其他不规则时间列表对不规则时间序列进行重新采样和插值

python - 页脚字符串未显示在 View 中 - Odoo v8

python - 如何定义两个位置参数的互斥组?

python-2.7 - python中numpy数组的简单绘图?

python - 无法解压不可迭代对象/遍历python中的对象数组

python - 尝试将 pandas 数据框保存到现有 Excel 工作表时出现 AttributeError

python - 在列表中将姓氏、名字切换为名字姓氏

python-2.7 - Python蒙太奇在OpenCV图像上的情节并录制为视频

Python 套接字监听