инкрементная запись на диск - PullRequest
0 голосов
/ 30 марта 2020

Я хочу выполнить тяжелую пакетную обработку и записать результаты в память, используя Python. Поскольку я буду писать ~ 30 миллионов записей, ввод / вывод становится значительным. Моя стратегия состоит в том, чтобы создать объект дескриптора файла один раз в конструкторе класса, а затем вызвать f.write в al oop.

Должен ли я сам реализовывать пакетную логику c или полагаться на ту, которая неявно используется в методе write?

Я могу наблюдать, что происходит некоторая буферизация неявно путем периодического запуска wc -l на выходе. Он не go линейно растет, вместо этого он увеличивается каждые ~ 5 минут или около того на ~ 20 тыс. Строк. Поэтому я могу только предположить, что некоторое пакетирование происходит внутри. Должен ли я поэтому предположить, что мой ввод-вывод уже оптимизирован?

В качестве альтернативы я мог бы:

  1. Добавить свои строки к временному list, пока не будет достигнут определенный размер пакета
  2. Присоединитесь к списку с помощью "\ n" .join (l) и напишите одним вызовом
  3. Очистите список и продолжайте

Мой лог c будет немного более запутанный, чем предыдущий обзор, так как моя бизнес-логика c, которая дает строки для записи, также происходит в пакетном режиме и использует графический процессор, поэтому я спрашиваю, стоит ли это выше, прежде чем пытаться это делать. Кроме того, если вы порекомендуете такой подход, я был бы признателен за приблизительный показатель, чтобы попытаться определить размер пакета на шаге 1. Моя оперативная память может обрабатывать 100 тыс. Записей, это будет оптимальным решением?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...