düzenleme:Python, neden mmap.move() belleği doldurur?
def delete_bytes(fobj, offset, size):
fobj.seek(0, 2)
filesize = fobj.tell()
move_size = filesize - offset - size
fobj.flush()
file_map = mmap.mmap(fobj.fileno(), filesize)
file_map.move(offset, offset + size, move_size)
file_map.close()
fobj.truncate(filesize - size)
fobj.flush()
Bu süper hızlı çalışır, ancak ben bunu çalıştırdığınızda: Ben ofset belli bir dosyadan bayt kaldırmak için mmap'e kullanan bir işleve sahip Win10 ve python 3.5
kullanma Çok sayıda dosya, bellek hızlı bir şekilde doldurur ve sistemim yanıt vermemeye başlar.
Bazı deneylerden sonra, move() yönteminin buradaki suçlu olduğunu ve özellikle de taşınan veri miktarını (move_size) buldum. Kullanılan bellek miktarı, mmap.move()
ile taşınan toplam veri miktarına eşittir. Her bir ~ 30 MB'lık taşınan 100 dosyam varsa, bellek ~ 3GB ile doldurulur.
Taşınan veriler neden bellekte bırakılmıyor? hiçbir etkisi Denedim
şeyler:
- işlevi sonunda
gc.collect()
arayarak. Küçük parçalar halinde hareket etmek için işlevi yeniden yazmak - .
Hangi işletim sistemini kullanıyorsunuz? Python sürümü de. – wind85
Ayrıca, belleğin python işleminiz mi yoksa İşletim Sistemi mi tarafından kullanıldığını kontrol edebilir misiniz? – Leon
Üzgünüz, bahsetmeyi unuttum: Win10 ve python 3.5'dayım. Belleğin python veya işletim sistemi tarafından kullanıldığını nasıl kontrol ederim? – mahkitah