第3ラウンドのexecutinon(ループ中)のnfind
のエラーは、MemoryErrorをCACHE[sha] = number
と返しますか? システムに十分なメモリがあり、whileループのすべての端に割り当てられたメモリがクリアされますが、3回目にエラーが返され、while
ループが実行されます。 これらのコードを実行すると、XRAN= 2**23
を大きな値または小さい指数(1または2)に変更してエラーを生成する必要がある場合があります。 助けと提案をお願いします。辞書変数のMemoryError
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
しかし、私は 'デルcache'に持つループのすべての端にメモリを解放します。また、システムエクスプローラでメモリの割り当てを監視し、ループのたびに解放されます。十分なメモリがあります。この例のコード は、この部分がこの説明に重要ではないため、使用されません。 – user1391182
さて、すべてのループの後にメモリが解放されるのは当然です。それは、単一ループ内のメモリ制限でなければなりません。 – jdi
@ user1391182:十分なメモリがあると思われる理由を説明できますか?明らかにあなたはしません。 –