Убивает процесс во время чтения и записи файла Python

Есть функция которая заменяет нужные символы в файле (файл 10 гигабайт +- 5гб), написана она так:

def replace_in_file(replacements, path_to_file, encoding='utf-8'):
    file_name = os.path.basename(path_to_file)
    temp_path = f'{path_to_file[:-len(file_name)]}{datetime.now().timestamp()}_{file_name}'
    with open(path_to_file, 'r', encoding=encoding, buffering=8192) as file_from:
        with open(temp_path, 'w', encoding=encoding, buffering=8192) as file_to:
            for line in file_from:
                for from_, to_ in replacements.items():
                    line = line.replace(from_, to_)
                file_to.write(line)
    os.remove(path_to_file)
    os.rename(temp_path, path_to_file)

Когда локально запускаю программу, то она спокойно работает, суммарно занимая не больше полтора гигабайта в памяти. Но всё почему-то работает иначе на сервере с убунтой.

Делал и без buffering, результат такой-же. Там, как я выяснил опытным путём, процесс замены строк сжирает до 15 гигабайт памяти и убивается. Подскажите пожалуйста, что я мог тут упустить?


Ответы (1 шт):

Автор решения: Maksim Matantsev

Помогло чтение файла кусками, а не построчно:

with open(path_to_file, 'r', encoding=encoding) as source, open(temp_path, 'w', encoding=encoding) as output:
    while line := source.read(chunk_size):
            ...

Но тут надо учитывать то, что часть заменяемого слова может быть разбита в несколько чанков(в зависимости от размера чанков и заменяемых слов). Это имплементируйте уже на свой вкус и цвет)

→ Ссылка