Мне нужно прочитать произвольно большой файл, проанализировать его (что означает, что при этом нужно сохранить некоторые данные в памяти), а затем записать новую версию файла в файловую систему.Учитывая ограничения памяти, мне нужно читать файл постепенно или в пакетном режиме.Однако чем больше пакеты, тем лучше (поскольку информация, используемая для разбора каждой строки файла, содержится в других строках файла).
Очевидно, я могу получить информацию об использовании памяти с помощью чего-то вроде
import psutil
psutil.virtual_memory()
, который также возвращает доступную память в процентах.См. Этот ответ https://stackoverflow.com/a/11615673/3924118 для получения дополнительной информации.
Я хотел бы определить размер пакетов на основе доступной памяти и на основе памяти, используемой и зарезервированной для текущего процесса Python.
Очевидно, я могу получить память, используемую текущим процессом Python, с помощью
import os
import psutil
process = psutil.Process(os.getpid())
print(process.memory_info().rss) # in bytes
См. https://stackoverflow.com/a/21632554/3924118 для получения дополнительной информации.
Итак, есть ли способналичия адаптивного размера пакета (или генератора), основанного на доступной памяти, выделенной для текущего процесса Python, и общей доступной памяти системы, так что я могу читать столько строк, сколько позволяет доступная память за раз, а затем читать следующуюпартия строк и т. д.?Другими словами, мне нужно постепенно читать файл так, чтобы число строк, считываемых за один раз, было максимальным при соблюдении ограничений памяти (в пределах определенного порога, например, до 90% используемой памяти).