Могу ли я «очистить» память при копировании/манипулировании подходящим файлом с помощью python?

Я работаю с файлами размером ~ 300 x 200 МБ и пытаюсь написать код, который копирует их в новые каталоги на основе их имени файла. Ниже приведен пример моего кода. Я записал свои имена файлов в списки (блоки) в массиве блоков. Затем я перебираю каждый блок и использую Shutil, чтобы скопировать файл fits.

Мой компьютер продолжает замедляться, а затем зависает, когда я запускаю свой код. Я осмотрелся и нашел gc.collect(), но это, похоже, не помогает. Можно ли как-нибудь очистить память после копирования каждого файла?

for block in blockarray:
    for i in range(1,len(block)):
        old_path = current_path + num + '/' + block[i]
        new_path = current_path + num + '_ex/' + block[0] + '/' + block[i]
        if not os.path.exists(new_path):
            shutil.copyfile(old_path, new_path)
            print "%s copied" %(block[i])

person user4564435    schedule 13.02.2015    source источник


Ответы (1)


Я не уверен, что это поможет, но вы можете попробовать: vmtouch.

Вот пример из его документации:

У нас есть 3 больших набора данных, a.txt, b.txt и c.txt, но только 2 из них поместятся в памяти одновременно. Если у нас есть файлы .txt и b.txt в памяти, но теперь мы хотели бы работать с b.txt и c.txt, мы могли бы просто начать загрузку c.txt, но тогда наша система вытеснит страницы из обоих файлов a.txt (что мы хотим) и b.txt (что нам не нужно).

Итак, давайте подскажем системе и вытесним из памяти файл .txt, освободив место для файла c.txt:

$ vmtouch -ve a.txt Evicting a.txt

       Files: 1
 Directories: 0    Evicted Pages: 42116 (164M)
     Elapsed: 0.076824 seconds

P.S. Instagram рекомендовал этот инструмент, вот как Я это знаю, но сам не играл.

person laike9m    schedule 13.02.2015