2015-12-16 3 views
14

Я использую python/pysam для анализа данных последовательности. В его учебнике (pysam - An interface for reading and writing SAM files) для команды mate сказано:Как кэшировать чтения?

«Этот метод слишком медленный для обработки с высокой пропускной способностью. Если чтение нужно обрабатывать с помощью его помощника, работайте с отсортированным файлом чтения или, лучше, с чтением кеша ».

Как бы вы «читали кеш»?

ответ

9

Caching - типичный подход для ускорения длительных операций. Он жертвует памятью ради вычислительной скорости.

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

Что вы можете сделать, это хранить ограниченное количество комбинаций {parameters: result} и пропускать его логику при каждом вызове функции с теми же параметрами.

Это грязный трюк, но довольно эффективен, особенно если комбинация параметров низкая по сравнению с функцией скорости.

В Python 3 для этой цели есть decorator.
В Python 2 a library может помочь, но вам нужно немного больше работы.

3

AlignmentFile принимает в качестве первого аргумента:

filepath_or_object

Так вместо того, чтобы поставлять имя файла, вы можете поставить объект, который поддерживает интерфейс файла типа, то есть методы seek, read , tell. При реализации класса для этого вы также можете реализовать кэширование на чтениях, которое, конечно, должно зависеть от текущей позиции курсора.

Если размер файла достаточно мал, так что она вписывается в памяти, вы можете прочитать полный файл и работать на io.BytesIO объекта, нет необходимости, чтобы сделать свой собственный класс:

data = io.BytesIO(open('datafile','rb').read()) 
your_object = AlignmentFile(data, <other args>) 

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

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