Как определить размер пакета на основе доступной памяти? - PullRequest
0 голосов
/ 26 сентября 2019

Мне нужно прочитать произвольно большой файл, проанализировать его (что означает, что при этом нужно сохранить некоторые данные в памяти), а затем записать новую версию файла в файловую систему.Учитывая ограничения памяти, мне нужно читать файл постепенно или в пакетном режиме.Однако чем больше пакеты, тем лучше (поскольку информация, используемая для разбора каждой строки файла, содержится в других строках файла).

Очевидно, я могу получить информацию об использовании памяти с помощью чего-то вроде

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% используемой памяти).

1 Ответ

0 голосов
/ 26 сентября 2019

Я бы исправил размер данных, которые вы читали за раз, вместо того, чтобы пытаться случайным образом заполнить вашу память.Читайте ваши данные в фиксированных блоках.Намного легче иметь дело.

...