0

ファイルに定期的に書き込むスレッド(writeThread)と、ファイルから非同期に読み取る別のスレッド(readThread)があります。readThread は別のハンドルを使用してファイルにアクセスできますか?

そうでない場合、Python には writeThread で使用できるが readThread をブロックしない共有ロックがありますか? ファイル アクセスにはミリ秒のオーダーがかかり、writeThread の書き込み期間は同じオーダーであるため、単純な非共有ロックは好みません (期間はいくつかの外部パラメーターに依存します)。したがって、writeThread がロックを解放したとしても、すぐにロックを再取得して飢餓を引き起こす状況が発生する可能性があります。

私が考えることができる解決策は、ファイルの複数のコピーを保持し、1 つは読み取り用、もう 1 つは書き込み用であり、状況全体をまとめて回避することです。ただし、関連するファイル サイズが巨大になる可能性があるため、この方法は好ましくありません。

他の選択肢はありますか、それともこれは悪い設計ですか?

ありがとう

4

1 に答える 1

0

はい、ファイルを複数回開いて、個別にアクセスできます。各ファイルオブジェクトには独自のバッファと位置があるため、たとえば一方をシークしても他方が混乱することはありません。これは、複数のプログラム アクセスとほとんど同じように機能し、ファイルの同じ領域を読み書きするときは注意が必要です。たとえば、ファイルの末尾に追加される書き込みは、書き込みオブジェクトがフラッシュされるまでリーダーには表示されません。既存のデータの書き換えは、リーダーとライターの両方がフラッシュされるまで、リーダーには表示されません。書き込みはアトミックではないため、レコードを書き込んでいる場合、リーダーには部分的なレコードが表示される場合があります。リーダーの async Select または poll イベントはファンキーかもしれません...それについてはわかりません。

代替手段は mmap ですが、落とし穴を知るのに十分に使用していません。

于 2013-04-11T03:27:59.013 に答える