これを解決する最もエレガントな方法は何ですか?
組み込み関数は次のように機能します
>>> path = r"c:\scr.txt"
>>> file1 = open(path, "w")
>>> print file1
<open file 'c:\scr.txt', mode 'w' at 0x019F88D8>
>>> file2 = open(path, "w")
>>> print file2
<open file 'c:\scr.txt', mode 'w' at 0x02332188>
>>> file1.write("111")
>>> file2.write("222")
>>> file1.close()
scr.txtに「111」が含まれるようになりました。
>>> file2.close()
scr.txtは上書きされ、現在 '222'が含まれています(WindowsではPython 2.4)。
ソリューションは、同じプロセス内で(上記の例のように)、別のプロセスがファイルを開いたときに機能するはずです。
クラッシュするプログラムがロックを開いたままにしない場合は、この方法をお勧めします。
完全にクロスプラットフォームの方法があるとは思いません。UNIXでは、fcntlモジュールがこれを行います。ただし、Windowsでは(パスのそばにいると思います)、win32fileモジュールを使用する必要があります。
幸い、Pythonクックブックには、プラットフォームに適したメソッドを使用した移植可能な実装(portalocker)があります。
これを使用するには、ファイルを開いて、次のように呼び出します。
portalocker.lock(file, flags)
ここで、フラグはportalocker.LOCK_EX(排他的な書き込みアクセスの場合)、またはLOCK_SHが共有の読み取りアクセスの場合です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加