0

パラメータファイルから入力を受け取り、出力ファイルを生成するプログラム(PatchDock )があります。このプログラムの実行には時間がかかります。同じパラメーターを2回実行する必要がないように、過去の実行結果をキャッシュしたいと思います。

入力ファイルと出力ファイルを適切なデータ構造に解析することができます。たとえば、入力ファイルは辞書のようなオブジェクトに解析されます。入力キーはすべて文字列であり、値はプリミティブデータ型(int、string、およびfloat)です。

私のアプローチ

私の最初のアイデアは、入力ファイルのmd5ハッシュをshelveデータベースのキーとして使用することでした。ただし、これはまったく同じ入力でキャッシュされたファイルをキャプチャできませんが、入力ファイルに若干の違いがあります(コメント、間隔、パラメーターの順序など)。

解析されたパラメーターをハッシュすることは、私にとって最良のアプローチのようです。しかし、辞書から一意のハッシュを取得することを考える唯一の方法は、ソートされた文字列表現をハッシュすることです。

質問

パラメータディクショナリの文字列表現をハッシュすることは、私の最終目標を達成するための回り道のように思えます-指定された出力に一意の入力値をキーイングします。このキャッシングシステムを実現するためのより簡単な方法はありますか?

理想的には、Pythonでこれを実現することを目指しています。

4

2 に答える 2

4

解析された入力のソートされた表現をハッシュすることは、実際にはこれを行う最も簡単な方法であり、理にかなっています。あなたの本能は正しかった。

基本的に、入力を正規化し(解析して並べ替えることにより)、それを使用してハッシュキーを作成します。

于 2012-08-19T05:40:15.677 に答える
2

ハッシュは非常に実行可能な方法のようですが、これを自分で行うのは少しやり過ぎのようです。入力のタプルを辞書のキーとして使用してみませんか?ハッシュや衝突の可能性について自分で心配する必要はありません。キーワード引数の順序を修正するだけです(要件に応じて、設定されていないキーワードのフラグオブジェクトを追加します)。

functools.lru_cachePython 3.2以降を使用している場合は、便利な場合もあります。これは、decorated関数の最後のn回の呼び出しのキャッシュを有効にするデコレータです。古いバージョンを使用している場合は、この機能のバックポートがあります。

また、FileDictと呼ばれる同様の目標を持つプロジェクトがあり、一見の価値があるようです。

于 2012-08-19T11:08:10.043 に答える