ファイルのロックとfcntl

、Pythonのロックファイル

それは、書き込み(または読み取り)するために、複数のプロセスに来るとき、私たちは、同じファイルの場合にはPythonのアプリケーションを作成する場合、いくつかのプロセスが同時にこの文書を記述する必要があれば、ファイルの内容が非常に混乱となり、この時間は、ファイルロックは便利です。

Pythonのロックファイル、あなたは、その唯一のプロセスファイルの書き込みを確保することができ、現在、このライブラリのfcntlを使用している、それは実際のUnix、群れとfcntl機能上のioctlインタフェースを提供します。ファイルロックのfcntl.flock()関数を呼び出すことによってパイソン。

 

fcntlのこのモジュールはPythonで、内蔵されていますが、Windowsではなく、手動でfcntl.pyファイルをダウンロードし、Python Libディレクトリの下にそれを保存することができます。

 

ロックの第二に、タイプ

  • LOCK_SH:任意の時点で、ファイルの共有ロックが複数のプロセスが所有することができ、共有ロックを作成することを約束
  • LOCK_EX:任意の時点で、排他ロックの作成を表し、ファイルが排他ロックが唯一のプロセスになる可能性があり
  • LOCK_UN:(アンロック)プロセスによって作成されたロックを削除することを意味
  • LOCK_MAND:これは主に必須の共有モード・ロックで使用され、それによって同時読み出しを可能にするか、()(マニュアルページのフロックが操作同時を記述するかどうかを示す、LOCK_READ又はLOCK_WRITEの使用と組み合わせることができるがLOCK_MANDに覆われていないが、これはカーネルに達成されていることがわかりますカーネルのソースコードを読みます)
  • LOCK_NB:指定された、機能はファイルロックを返した場合は、すぐに入手することができないそうでなければ、関数は、ロックファイルを取得するために待機します。(|)演算LOCK_NBは、同一またはLOCK_SHビットまたはLOCK_EXであってもよいです。 

たとえば:ロックがプロセスを取得している場合、ファイルは、排他ロックを設定され、その後、他のプロセスの要求は、ロック時間がブロックされます取得します。
あなたが排他ロックを取得していない人の場合の処理を詰まらせたくない場合は、LOCK_NBと組み合わせて使用することができ、その後、システムはプロセスをブロックしません。すなわち:fcnt.flock(F、fcntl.LOCK_EX | fcntl.LOCK_NB )

 

第三に、ポイントに注意を払います

  1. ファイルクローズの場合は()の操作は、ファイルロックを失敗します。
  2. 同様に、プロセスファイルロック失敗の終了後。
  3. 群れ()LOCK_EXは「ロックを助言」で、カーネルはロックの状態を確認強制しません、あなたは明示的にローカルのファイル操作がコードに反映することができますチェックする必要があります。
  4. ロックファイルに先立ち、ファイルは、例えば、適切なアクセスモードで開かれていることを確認してください:
    ファイルを開くには、初回に読み出しモードを、共有ロックファイルを追加することを確認するため、
    排他ロックにファイルを追加するには、最初に書き込みモードに応じて、対応するファイルを開き、
    あなたがロックの他の種類を追加したい場合は、それをプレス書き込みモードを開くことが必要です。

 

第四に、例えば、

インポートのfcntlの


クラスロック(オブジェクト):
     デフ __init__ (自己、FILE_NAME):
        self.file_name = FILE_NAME 
        self.handle =オープン(FILE_NAME ' + W ' 

    DEF (自己)ロック:
        fcntl.flock(self.handle、fcntl.LOCK_EX | fcntl.LOCK_NB)は

    デフ(自己)のロックを解除:
        fcntl.flock(self.handle、fcntl.LOCK_UN)

    デフ __del__ (自己):
         試してください
            self.handle.close()
        を除くパス

 

おすすめ

転載: www.cnblogs.com/Zzbj/p/11068131.html