nfind
(while ループ) の 3 番目のラウンドで実行され、次のように MemoryError が返されるコードの何が問題になっていますCACHE[sha] = number
か? システムには十分なメモリがあり、while ループの最後で割り当てられたメモリをクリアしますが、while
ループの 3 回目の実行でエラーが返されます。これらのコードを実行すると、場合によっては、XRAN= 2**23
エラーを生成するために指数を大きくするか小さくする必要があると思います (1 つか 2 つ)。ヘルプと提案をお願いします。
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