2016-03-15 2 views
2

Я работаю с группой из numpy массивов, которые не все вписываются в ОЗУ, поэтому мне нужно периодически сохранять их и загружать с диска.prefetch numpy массивы с диска?

Как правило, я знаю, какие из них мне нужно прочесть раньше времени, поэтому я бы хотел скрыть задержку, выпустив что-то вроде инструкции «предварительной выборки» заранее.

Как мне это сделать?


(There is a similar question related to TensorFlow: Однако, я не использую TensorFlow, и поэтому я бы не хотел, чтобы создать зависимость от него)

+0

«почти все программирование можно рассматривать как упражнение в кешировании» ... –

+0

@ali_m I/O имеет целые массивы, не memcpy, но я гибкий в своих вариантах относительно остальных – MaxB

+1

Ваш вопрос по-прежнему довольно расплывчатый. Матрицы с памятью ('numpy.memmap') и HDF5 (PyTables, h5py) - это два варианта, которые вы, вероятно, должны учитывать, но вам нужно будет более подробно рассказать о своей проблеме, если вы хотите получить конкретный ответ. –

ответ

3

Если вы используете Python 3.3+ на UNIX-подобных системы, вы можете использовать os.posix_fadvise, чтобы инициировать предварительную выборку после открытия файла. Например:

with open(filepath, 'rb') as f: 
    os.posix_fadvise(f.fileno(), 0, os.stat(f.fileno()).st_size, os.POSIX_FADV_WILLNEED) 

    ... do other stuff ... 

    # If you're lucky, OS has asynchronously prefetched file contents 
    stuff = pickle.load(f) 

Помимо этого, Python напрямую не предлагает никаких интерфейсов API для явного упреждения, но вы можете использовать ctypes вручную загрузить OS соответствующей функцию предварительной выборки, или использовать фоновый поток, который не делает ничего, кроме чтения и отбросить блоки из файла, чтобы улучшить вероятность того, что данные находятся в системном кеше.

+0

Я на 2.7. облом .. – MaxB

Смежные вопросы