私はpython/pysamを使ってシーケンシングデータを解析しています。コマンドメイトのチュートリアル(pysam - An interface for reading and writing SAM files)では、読み取りをキャッシュする方法は?
'この方法は高処理能力の処理には遅すぎます。読まれたものをそのメイトで処理する必要がある場合は、読まれた名前のソートされたファイルから作業するか、より良いキャッシュ読取りを行います。
どのようにキャッシュを読み込みますか?
私はpython/pysamを使ってシーケンシングデータを解析しています。コマンドメイトのチュートリアル(pysam - An interface for reading and writing SAM files)では、読み取りをキャッシュする方法は?
'この方法は高処理能力の処理には遅すぎます。読まれたものをそのメイトで処理する必要がある場合は、読まれた名前のソートされたファイルから作業するか、より良いキャッシュ読取りを行います。
どのようにキャッシュを読み込みますか?
Cachingは、長時間実行する操作を高速化するための一般的な方法です。それは計算速度のためにメモリを犠牲にします。
パラメータのセットが常に同じ結果を返す関数を持っているとしましょう。残念ながら、この機能は非常に遅く、プログラムの速度をかなり遅くする必要があります。
あなたができることは、限られた量の{parameters:result}の組み合わせを保存し、同じパラメータで関数が呼び出されるたびに論理をスキップすることです。
これは汚いトリックですが、特にパラメータの組み合わせが機能速度に比べて低い場合は非常に効果的です。
Python 3には、この目的のためにdecoratorがあります。
Python 2ではlibraryが役に立ちますが、もう少し作業が必要です。ファイル名を供給するので、代わりに
filepath_or_object
、あなたが方法seek
、read
すなわち、ファイルのようなインターフェースをサポートするオブジェクトを供給することができた:
AlignmentFileは、最初の引数として取ります、tell
。 これに対してクラスを実装するときは、読み込みにキャッシングを実装することもできます。もちろん、現在のカーソル位置に依存する必要があります。私はこのことを確認していない
data = io.BytesIO(open('datafile','rb').read())
your_object = AlignmentFile(data, <other args>)
:ファイルサイズは、それがメモリに収まることを、あなたは完全なファイルを読み込み、io.BytesIO
オブジェクトを操作できるように十分に小さい場合
、必要が独自のクラスを作成しないように私は近代的なオペレーティングシステム(私はLinuxがそれを行うことを知っている)は、キャッシュファイルへのアクセスを行うと仮定しているため、多くのことを高速化します。だからそれに頼るだけで十分だろう。