データサイエンティスト的な仕事をしたりスクレイパー的な開発をするとキャッシュしたくなることがある。
例えばどういう時かというと
- pandas使っていてデータベースに重い重い処理を投げて帰ってきたものをd3.jsとかseabornみたいな描画処理のところで試行錯誤したい
- requests+pyqueryとかでスクレイピング用のコード書きたいけど、相手のサイトに何度もアクセスするのは気が引ける
で、大抵そういう時ってファイルキャッシュしておくと思うんだけど、そのコードを追加するのが結構な心理的な負担になることが多いです。
本運用時に消すの忘れてアチャーってなったりするしね。
結局キャッシュ追加削除にコードの変更っていうのは面倒くさいというかよくないので、joblibを使うとハッピー
/tmpにでもキャッシュディレクトリ設定しておいてキャッシュしたい関数にデコレーターかます。これだけ
import requests from joblib import Memory memory = Memory(cachedir="/tmp") @memory.cache def get_ct(): r = requests.get("https://clinicaltrials.gov/search?term=IPI-145&resultsxml=true") return r.content if __name__ == '__main__': print get_ct()
本運用ではデコレーター外すだけだから心理的負担がほぼゼロ☆