
ビデオファイル(RAW)を受信してトランスコードするプロセスがあります。FFMPEG3つの(異なる解像度)結果ファイルが生成されます。私は分散ジョブキューシステムを使用しています(セロリ) は FFMPEG の各プロセスを異なる非同期操作として扱います。
プロセスに応じて3つのタスクが実行されます。
- ビデオ変換
- クラウドストレージバケットに結果をアップロードする
- 結果を削除
最後の操作では、元のビデオ(トランスコード用)をバケットにアップロードしてから削除します。
これら3つの操作を非同期で開始してからRAWファイルをすぐに削除すると、ファイルの削除によってRAWファイルを使用する操作が中断されますか?
PS:トランスコーディング操作の開始中にRAWファイルがメモリにロードされ、3回開かれるとします。
答え1
RAWファイル全体がメモリにあると仮定すると、間違っています。通常、ファイルが開かれると、プロセスはファイルの読み書きに使用できるファイル記述子を取得します。
プロセスによってファイルが開かれた後にファイルがまだ開いている間に削除された場合、実際にファイルはすぐに削除されません。プロセスがファイルへのハンドル(ファイル記述子)を所有していない場合、ファイルは実際に削除されます。これを使用して、lsof
ファイルにまだハンドルがあるかどうかを確認できます。ファイルを削除すると、通常はその行に(deleted)
テキストが一覧表示され、追加されます。
また、開いているファイルを削除してもディスク容量を取り戻さないため、開いている限り安全に使用できます。削除されたファイルにアクティブなファイル記述子がなくなると、ファイルシステムは消費されたディスク容量を回復します。
答え2
3つのffmpegプロセスをすべて削除する前に入力ファイルを開いたままにしておくと、動作する可能性が高くなります。ただし、ffmpegがファイルを閉じて再度開くと失敗します。 ffmpegがこれをしないと確信できれば、おそらく安全でしょう。