Publicité
Publicité

Contenu connexe

Présentations pour vous(20)

Publicité
Publicité

Pythonでキャッシュを活用する話①

  1. Pythonでキャッシュを 活用する話① 執筆者:トビウオ
  2. キャッシュとは? • キャッシュとは、低速な記憶装置や伝送路から読み出 したデータのうち、直近に読み込んだものや使用頻度 が高いものを高速な記憶装置に複製しておくこと。ま た、その際に使われる高速な記憶装置や、複製された データそのもののこと。データの読み込みを高速化し たり、伝送量を削減することができる。 ( IT用語辞典 e-Wordsより引用 )
  3. キャッシュとは? • つまり、時間が掛かるデータ取得処理について 、より素早く読み出せる位置に置いておくこと • 例1:複雑で時間が掛かる計算 • 例2:読み込みが遅いファイルストレージ • 例3:取得に時間が掛かるネット上のデータ
  4. どこに蓄えておくか? ①メインメモリ上に保存 ②ファイルとして保存 ③データベースに保存
  5. ①メインメモリ上に保存 • 「変数に書き込む」だけでも立派なキャッシュ • 例: a = func1(42) • 汎用的には「関数の戻り値」を扱いたい • Pythonの場合はfunctoolsが使える ( 非純正ライブラリだとcachetoolsなどが該当 )
  6. ①メインメモリ上に保存 • functoolsの場合、関数にデコレーターで修飾す るだけで、処理結果をキャッシュしてくれる ( 公式ドキュメントより引用 )
  7. ②ファイルとして保存 • ①だと永続化されていないので、アプリを終了 させるとキャッシュ情報が消えてしまう • そのため、キャッシュ情報をいったん保存して 、再利用することを考える
  8. ②ファイルとして保存 • 単なるテキストではない、バイナリデータや構造データを扱う 場合に使える手段の例 方式 利点 欠点 pickle 手軽、Pythonのデータを 忠実に表せる Pythonからしか扱えない json テキストなので読みやすい 、互換性が高い 冗長、型情報は失われる、 特殊な型は表せない MessagePack 互換性が高い、コンパクト に保存できる ライブラリの別途導入が必 要
  9. ③データベースに保存 • ②と概ね同じだが、より柔軟に再利用できる • 取得したデータを検索/加工/削除 • 複数のアプリ/クライアントで共有 • 扱えるデータの柔軟性は②より下がる
  10. ③データベースに保存 • Pythonの場合、requestsライブラリに対する requests-cacheライブラリが知られている ( request-cacheの公式ドキュメントより引用 )
  11. ③データベースに保存 • Pythonの場合、①のように任意の関数の戻り値 をSQLiteにキャッシュ……できるライブラリは 無さそう • 自作はさほど難しくない
  12. おまけ:デコレーター自作 • キャッシュとは直接関係ないが…… • ①のような使い勝手でキャッシュしたい人向け • Pythonのデコレーターは簡単に実装できる
  13. おまけ:デコレーター自作
Publicité