問題タブ [klepto]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 選択的キャッシュ/メモ化のためのデコレーター
@memoize
次のように関数で使用できるデコレータを作成する方法を探しています。
次に、もしそうなら:
ここで、キャッシュの更新を強制したいとします。
上記の最後には常に がありますがresult4 = result3
、必ずしもresult4 = result
であるとは限りません。そのため、同じ入力パラメータに対してキャッシュの更新を強制するオプションが必要です。
どうすればこの問題にアプローチできますか?
注意事項joblib
私の知る限り、再実行を強制する をjoblib
サポートしていますが、キャッシュは更新しません。.call
使用に関するフォローアップklepto
:
デフォルトで結果を特定の場所にキャッシュする方法はありますかklepto
(@Wally の回答を参照)。(例/some/path/
) この場所を複数の機能で共有しますか? 例えば、私は言いたい
次に@memoize
、同じパスの下の特定のモジュール内のいくつかの関数。
python - Klepto を使用した Python の保存と編集
さて、私の質問はかなり具体的であり、前もってお詫び申し上げます。私は新しいプログラマーで、自分でゼロから開発しようとしました。それは比較的うまくいきましたが、私が見ることができる最後の問題が 1 つあります。ここで私のコード全体を表示できます。
したがって、私が抱えている問題は、ファイルの保存方法に関連しています。辞書なので最初にピクルしようとしましたが、辞書が
(名前、クラス)のペアであるため、エラーが発生し続けました。
ここを検索したところ、JSON を試して同じことができることがわかりました。同じ種類のエラーで終わりました。最終的に、動作する klepto モジュールを見つけました。辞書を正常に保存し、正常にロードしました。ファイルに新しいアイテムを追加できることがわかったのは後になってからでしたが、辞書から何かを削除して保存するたびに。次回はロードします。外した鍵はそのままです。
TLDR: dict に問題なく追加して txt ファイルに保存できますが、dict から削除して保存すると、削除されたキーは保存されません。
とにかく、ファイルを保存する方法、またはファイルをロードする方法、またはその両方に問題がある場所に困惑していますか? どんな助けでも大歓迎です。
編集:わかりました、それが現在保存およびロードするように設定されている方法だと思います。
と
新しいアイテムを追加している間、辞書はうまく保存されますが、編集して何かを削除してから保存して終了する必要があると言います。次回ロードすると、新しいアイテムだけでなく古いアイテムも含まれます。奇妙なことに、すべての編集で何かが壊れているようです。新しいエントリを保存しません。
編集2:
こんな感じで鍵を外します。もともと pop メソッドを使用していましたが、変更が保存されないときにこれを試しました。注意として、ディクショナリからキー、値を削除しましたが、保存とリロードはその変更を反映しません。
これが、新しいキーと値のペアを作成する方法です。
解決済み編集:
私の問題は、それらを辞書から削除する方法にありました。後で誰かがここに出くわした場合に備えて。@Mike Mckernsの回答を見てください。アーカイブされた辞書から削除する必要がありました。
python - klepto の期限付きキャッシュ
非常に重くて時間のかかる計算をキャッシュするために、klepto (v. 0.1.5.2) を試しています。特に、キャッシュアーカイブlru_cache
と組み合わせてデコレータとして使用しています。hdfdir_archive
この回答で提案されているように、purge=False
オプションを使用してキャッシュコンテンツをディスクに保持することができました。これは魅力的な方法です。とにかく、(同じ入力パラメーターを使用しても) たまに関数を再計算します。一部の計算は、一定期間後に変更される可能性のあるデータに基づいているためです。lru_cache
簡単な回避策として、関数の入力パラメーターに現在の日付を含めて、古いエントリの有効期限が切れているかどうかを確認するカスタムキーマップを実装できると考えました。しかし、キーマップをカスタマイズする方法の例が見つからないため、このソリューションが実現可能かどうか、または機能するかどうかはわかりません.
ただし、より洗練された、またはよりシンプルなソリューションが で既に利用可能であるかどうかは疑問ですklepto
。つまり、事前に設定した期間が経過した後にキャッシュ エントリを自動的に無効にするオプションまたはポリシーはありますか?
ありがとう!