2015-12-16 33 views
14

私はpython/pysamを使ってシーケンシングデータを解析しています。コマンドメイトのチュートリアル(pysam - An interface for reading and writing SAM files)では、読み取りをキャッシュする方法は?

'この方法は高処理能力の処理には遅すぎます。読まれたものをそのメイトで処理する必要がある場合は、読まれた名前のソートされたファイルから作業するか、より良いキャッシュ読取りを行います。

どのようにキャッシュを読み込みますか?

答えて

9

Cachingは、長時間実行する操作を高速化するための一般的な方法です。それは計算速度のためにメモリを犠牲にします。

パラメータのセットが常に同じ結果を返す関数を持っているとしましょう。残念ながら、この機能は非常に遅く、プログラムの速度をかなり遅くする必要があります。

あなたができることは、限られた量の{parameters:result}の組み合わせを保存し、同じパラメータで関数が呼び出されるたびに論理をスキップすることです。

これは汚いトリックですが、特にパラメータの組み合わせが機能速度に比べて低い場合は非常に効果的です。

Python 3には、この目的のためにdecoratorがあります。
Python 2ではlibraryが役に立ちますが、もう少し作業が必要です。ファイル名を供給するので、代わりに

filepath_or_object

、あなたが方法seekreadすなわち、ファイルのようなインターフェースをサポートするオブジェクトを供給することができた:

3

AlignmentFileは、最初の引数として取ります、tell。 これに対してクラスを実装するときは、読み込みにキャッシングを実装することもできます。もちろん、現在のカーソル位置に依存する必要があります。私はこのことを確認していない

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

:ファイルサイズは、それがメモリに収まることを、あなたは完全なファイルを読み込み、io.BytesIOオブジェクトを操作できるように十分に小さい場合

、必要が独自のクラスを作成しないように私は近代的なオペレーティングシステム(私はLinuxがそれを行うことを知っている)は、キャッシュファイルへのアクセスを行うと仮定しているため、多くのことを高速化します。だからそれに頼るだけで十分だろう。

関連する問題