2017-07-27 2 views
-1

同じファイルを更新する2つのスクリプトがあります。どちらも同時に実行できます。ファイルの一貫性のない更新を防止するにはどうすればよいですか?言い換えれば、ファイルへのアクセスをシリアル化する方法は?プロセス間アクセスの同期化のための共通ファイルの更新

質問を教えてください。シェルフファイルがあり、それを更新するスクリプトが2つあるとします。スクリプト1は、この処理を行います。

import shelve 
sf = shelve.open('some_file') 
sf[key1] = data1 
sf.close() 

スクリプト2は、次のコードを持っています

import shelve 
sf = shelve.open('some_file') 
sf[key2] = data2 
sf.close() 

スクリプト1がファイルを開いた後と仮定スクリプト2が予定されています。スクリプト2が完了し、制御がスクリプト1に戻ると、スクリプト1はその更新を行い、ファイルを閉じます。これにより、スクリプト2のアップデートが失われることになります。これが起こらないようにして、両方の更新がファイルに行われるようにするには?

答えて

1

粗いロックを使用すると、1人のクライアントだけがいつでもファイルにアクセスできるようにすることができます。

あなたは別々のプロセスにいるので、すべての共同編集者から読める共有リソースが必要です。

Redisのは、この簡単に(ロックに関するTTL)を作るカップルのプリミティブを提供し、そしてそれがあるので、シングルスレッドは、それへの同時アクセスを推論するのに役立ちます:

https://redis.io/topics/distlock

+0

は、それが標準ライブラリを使用して行うことができます? 'マルチプロセシング'モジュールでロック機能を使用できますか? – debashish

+0

'redlock'は明示的にファイルをロックしません。リソース(ファイル)を表す文字列にロックを作成します。しかし、それは仕事をします。 – debashish

関連する問題