多くのスレッドとプロセスを使用している間にファイルが決して壊れないようにする正しい解決策は何ですか?スレッドとプロセスを使用して同じファイルに同時に書き込む
オープンエラーを気にするスレッド用のバージョン。私はmultiprocessing.Lock
を使用しますが、私は2つの工程と、第1のプロセス自身の2つのスレッド(各1つの使用ファイル)
をしたい場合は、単に理論が存在しなければならないと思うのプロセスの
lock = threading.RLock()
with lock:
try:
f = open(file, 'a')
try:
f.write('sth')
finally:
f.close() # try close in any circumstances if open passed
except:
pass # when open failed
が、スレッドとプロセスとの同期をどのように組み合わせるかを知りたい スレッドはプロセスからそれを "継承"するため、プロセス間の同期のみが必要ですか?
および2.「私は書き込みが失敗したときに上記のコードの場合には、ネストされた試しが必要な場合はわからない、と私たちはこのISNながら開かれたファイル(それはロック解除後に開かれたままになります場合はどのような)
補足として、 'try' /' finally'は 'with'ステートメントで置き換えることができます。また、 'except:pass'は通常は悪い考えです。特定の例外を呑み込もうとしているのであれば、それだけではなく、すべてを絞ってください。ここを見てみると、intをファイル名として渡すような愚かなエラーがあった人から何十件もの質問を見つけることができます。 – abarnert
また、特にファイルをロックする場合は、汎用スレッド/プロセスロックの代わりに、POSIXでのアドバイザリファイルロックとWindowsでの排他的ファイルアクセスの使用を検討することをお勧めします。 – abarnert
もう1つの可能性は、単一のスレッドから追加するすべてのファイルを(1つのプロセスで)実行し、他の人にメッセージをキューに投稿させることです(組み込みのため、同期は必要ありません)。 – abarnert