L'ho sperimentato in altre lingue. Ora ho lo stesso problema in Python. Ho un dizionario che ha molte azioni CRUD. Si potrebbe presumere che l'eliminazione di elementi da un dizionario dovrebbe ridurre l'impronta di memoria di esso. Non è il caso. Una volta che un dizionario cresce di dimensioni (di solito raddoppia), non rilascia mai (?) Le memorie allocate. Ho eseguito questo esperimento:Come forzare il dizionario Python a ridursi?
import random
import sys
import uuid
a= {}
for i in range(0, 100000):
a[uuid.uuid4()] = uuid.uuid4()
if i % 1000 == 0:
print sys.getsizeof(a)
for i in range(0, 100000):
e = random.choice(a.keys())
del a[e]
if i % 1000 == 0:
print sys.getsizeof(a)
print len(a)
L'ultima riga del primo ciclo è 6291736
. L'ultima riga del secondo ciclo è anche 6291736
. E la dimensione del dizionario è 0
.
Quindi, come affrontare questo problema? C'è un modo per forzare il rilascio della memoria?
PS: non ho davvero bisogno di fare random - Ho giocato con il range del secondo ciclo.
Si potrebbe provare a creare un nuovo dizionario con il contenuto di quello vecchio e rimuovere il riferimento a quello vecchio. – iobender
A che punto? In orario? Come posso bloccare le scritture? – Schultz9999
I moduli 'threading',' multiprocessing' di Python e 'asyncio' * all * forniscono primitive di sincronizzazione quasi identiche come' Lock'. Vorrei iniziare a cercare nella documentazione del modulo applicabile. – brenns10