Я хочу выполнить тяжелую пакетную обработку и записать результаты в память, используя Python. Поскольку я буду писать ~ 30 миллионов записей, ввод / вывод становится значительным. Моя стратегия состоит в том, чтобы создать объект дескриптора файла один раз в конструкторе класса, а затем вызвать f.write
в al oop.
Должен ли я сам реализовывать пакетную логику c или полагаться на ту, которая неявно используется в методе write
?
Я могу наблюдать, что происходит некоторая буферизация неявно путем периодического запуска wc -l
на выходе. Он не go линейно растет, вместо этого он увеличивается каждые ~ 5 минут или около того на ~ 20 тыс. Строк. Поэтому я могу только предположить, что некоторое пакетирование происходит внутри. Должен ли я поэтому предположить, что мой ввод-вывод уже оптимизирован?
В качестве альтернативы я мог бы:
- Добавить свои строки к временному
list
, пока не будет достигнут определенный размер пакета - Присоединитесь к списку с помощью "\ n" .join (l) и напишите одним вызовом
- Очистите список и продолжайте
Мой лог c будет немного более запутанный, чем предыдущий обзор, так как моя бизнес-логика c, которая дает строки для записи, также происходит в пакетном режиме и использует графический процессор, поэтому я спрашиваю, стоит ли это выше, прежде чем пытаться это делать. Кроме того, если вы порекомендуете такой подход, я был бы признателен за приблизительный показатель, чтобы попытаться определить размер пакета на шаге 1. Моя оперативная память может обрабатывать 100 тыс. Записей, это будет оптимальным решением?