操作の実行中にデータが破損することが心配ですStorable::store
。特定のチェックポイントで計算をバックアップするために約 100 MB を NFS に書き込んでいますが、そのプロセスは必ずしも高速ではありません。
破損を防ぐために、SIG{INT}
シグナル ハンドラーがあります。が呼び出される直前にStorable::store
、安全に終了できないことを示すグローバル変数が設定されます。完了するとすぐにStorable::store
、そのグローバル変数は値に戻され、中断しても問題ないことを示します。
このグローバル変数は、シグナル ハンドラが呼び出すdie
かどうか、または「まだ停止できません」というステートメントを出力するだけかどうかを示すために使用されます。
しかし、私は本当に何かを助けていますか?perlipcを読んでみると、IO の中断は安全に行われる場合もあれば、安全に行われない場合もあることがわかります...つまり、Storeable::store
操作の途中でシグナル ハンドラが呼び出された場合、シグナル ハンドラのサブルーチンへのこのような短い迂回が必要になる場合があります。まだ物事を台無しにするのに十分です。
Storable
そのような状況でどのように機能するか知っている人はいますか? または、私の信号処理設定は実際に適切ですか?