我的代码在第3轮nfind(while循环)中执行,返回与CACHE[sha] = number一致的MemoryError是什么问题?
在系统上有足够的内存,并且在while循环的每一端,我都清除了分配的内存,但是在通过while循环的第3次运行中它返回了错误。
如果您在某些情况下运行这些代码,我想有必要将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之间

08-25 05:43