私は約 4 MB の txt ファイルを 1 つだけ使用しています。このファイルは、新しい行を追加する/特定のフレーズを含む特定の行を検索する/特定の行を別の行に置き換えるなど、頻繁に I/O を必要とします。
ファイルを「同時に」処理するために、threading.RLock()
稼働中のリソースをロックするために使用されます。大きなファイルではないので、単純readlines()
にすべてをリストに読み込んで検索ジョブを実行read()
し、ファイル全体を文字列に読み込んで、特定のフレーズを必要なものに置き換えるためにFileContent
使用します。FileContent.replace("demo", "test")
しかし、問題は、私がときどき「MemoryError」に直面することです。つまり、3 日または 4 日おきに、または 1 週間ほどかかることもあります。コードを注意深くチェックしたところ、各スレッドの終了時に閉じられていないファイル オブジェクトはありません。ファイル操作に関しては、次を使用するだけです。
CurrentFile = open("TestFile.txt", "r")
FileContent = CurrentFile.read()
CurrentFile.close()
おそらくPythonは役に立たない変数を思ったほど早く削除せず、最終的にメモリ不足になると思うのでwith
、ガベージコレクションが速いかもしれないステートメントを使用することを検討しています。私はそのような声明を経験していませんが、これが役立つかどうかは誰にも分かりますか? または、私の問題に対するより良い解決策はありますか?
どうもありがとう。
追加: 私のスクリプトは短時間で多くの置換を行うため、FileContent = CurrentFile.read() を使用する数百のスレッドが、FileContent をすぐに削除しないとメモリ不足になるのではないでしょうか? このような問題をデバッグするにはどうすればよいですか?