コマンドラインプログラムをメモ(キャッシュ)しますか?

コマンドラインプログラムをメモ(キャッシュ)しますか?

時には、同じ出力を得るために同じで高価なコマンドを繰り返し実行します。たとえば、ffprobeメディアファイルに関する情報を取得します。同じ入力が与えられると、常に同じ出力を生成する必要があるため、キャッシュが可能でなければなりません。

私は見たコマンドライン出力の記憶/キャッシュしかし、私はより徹底的な実装を探しています。特に実装は単にコマンドラインを比較するようです。渡されたファイルの1つが変更されたかどうかは不明です。 (固定長バッファもたくさんあって疑わしくもあり、デーモンというのもおかしいですね。)

私の記事を書き始める前に記事が存在するかどうか疑問に思いました。主な要件:

  • コマンドラインの入力ファイルが変更された場合は、コマンドを再実行する必要があります。
  • コマンドラインオプションが変更された場合は、コマンドを再実行する必要があります。
  • 私はコマンドが「非対話型」で実行されることに同意します。たとえば、/dev/nullstdinを使用し、stdoutとstderrのような2つの異なるファイルを使用します。
  • コマンドが正しくない場合は、終了コードでキャッシュするか、まったくキャッシュしないかを選択できます。
  • 上記を考慮すると、キャッシュされたコンテンツはできるだけ頻繁に返される必要があります。しかし、正確さが優先です。
  • たとえば、NFSを介してキャッシュを複数のシステム(すべて共通の制御下にある)間で共有できる場合は、より良いでしょう。

基本的に私が自分で書いたいのは(簡潔にするためにいくつかのロックとエラーチェックをスキップすることです)、コマンドライン+コマンドラインの各項目の統計を取得することです(エラーまたはdev、inode、サイズ、mtime)。 SHA-512またはSHA-256を介して全体の混乱を伝えます。これにより、固定サイズのキーが提供されますが、コマンドまたはファイルが変更されるとキーも変更されます(誰かがサイズとランタイムを維持する変更を行わない限り、その資格がある場合)。キーがキャッシュディレクトリにあることを確認してください。すでに存在する場合は、その内容を stdout と stderr にコピーします。それ以外の場合は、stdin /dev/null と stdout と stderr という 2 つのファイルを使用して、子プロセスでコマンドを実行します。成功したら、ファイルをキャッシュディレクトリに配置します。その後、その内容はstdoutとstderrにコピーされます。結果を直接作成した場合は、デザインフィードバックを歓迎します。その結果はフリーソフトウェアになります。

ベストアンサー1

あなたが望むものがうまくいかなかったので、本当に良い結果を与える一般的なツールが見つからないことがよくあります。

  • コマンドラインにないファイルにアクセスするコマンド。 ( locate myfile)
  • ネットワークにアクセスするコマンドです。 ( wget http://news.example.com/headlines)
  • 時間依存コマンド。 ( date)
  • ランダム出力でコマンドを発行します。 ( pwgen)

ツールを適用するコマンドを決定する必要がある場合は、必要なのはビルドツールです。出力が最新でなくてもコマンドを実行するツールです。高貴なもの作る良くないでしょう。依存関係を手動で定義し、特に他のコマンドのキャッシュを慎重に分離し、コマンドを変更するときにキャッシュを手動でキャンセルし、各キャッシュを別々のファイルに保存する必要があります。つまり不便だ。の一つ多くの選択おそらく作業に近いです。SConsチェックサムベースおよびタイムスタンプベースの依存関係分析をサポートし、その上にキャッシュメカニズムがあり、Pythonコードを書いて調整できます。

おすすめ記事