什麼是錯我的代碼,在第3輪nfind
(while循環)的executinon,符合CACHE[sha] = number
返回的MemoryError? 在系統上有足夠的內存,並且在while循環的每一端都清除了分配的內存,但是它在通過while
循環的第3次運行中返回錯誤。 如果您運行這些代碼,在某些情況下,我想有必要將XRAN= 2**23
更改爲更大或更小的指數(通過一個或兩個),以產生錯誤。 請幫助和建議。的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'我的可用內存。此外,我還使用System Explorer監視內存分配,並在每個循環結束時釋放它。有足夠的內存。在本例中代碼爲'CACHE',因爲這部分對本次展覽不重要。 – user1391182
是的,每次循環後內存都被釋放。這將是一個循環內的內存限制。 – jdi
@ user1391182:你能解釋爲什麼你認爲自己有足夠的記憶嗎?顯然你沒有。 –