У меня есть программа Python, которая обрабатывает довольно большие массивы NumPy (в сотнях мегабайт), которые хранятся на диске в файлах pickle (один массив размером ~ 100 МБ на файл). Когда я хочу запустить запрос по данным, я загружаю весь массив, используя pickle, а затем выполняю запрос (так что с точки зрения программы Python весь массив находится в памяти, даже если ОС заменяет его) , Я сделал это главным образом потому, что считал, что возможность использования векторизованных операций в массивах NumPy будет значительно быстрее, чем использование циклов для каждого элемента.Lazy Evaluation для итерации через массивы NumPy
Я запускаю это на веб-сервере с ограничениями памяти, с которыми я быстро сталкиваюсь. У меня есть много разных запросов, которые я запускаю на данных, поэтому запись кода «chunking», который загружает части данных из отдельных файлов pickle, обрабатывает их, а затем переходит к следующему фрагменту, скорее всего, добавит много сложности. Конечно, было бы предпочтительнее сделать этот «chunking» прозрачным для любой функции, которая обрабатывает эти большие массивы.
Похоже, что идеальным решением было бы нечто вроде генератора, который периодически загружал блок данных с диска и затем передавал значения массива один за другим. Это существенно сократит объем памяти, требуемый программой, не требуя дополнительной работы со стороны отдельных функций запроса. Можно ли сделать что-то подобное?
Может быть полезная ссылка: только что выяснилось, что это называется «внеочередной» задачей. – erich