<p>受<a href="https://stackoverflow.com/a/589440/1309045">solution described for concurrency checks</a>的启发,我想出了下面的代码片段。如果一个人能够适当地预测所讨论的文件的写入频率,它就可以工作了。解决方法是通过使用文件修改时间。在</p>
<pre><code>import os
import time
'''Find if a file was modified in the last x seconds given by writeFrequency.'''
def isFileBeingWrittenInto(filename,
writeFrequency = 180, overheadTimePercentage = 20):
overhead = 1+float(overheadTimePercentage)/100 # Add some buffer time
maxWriteFrequency = writeFrequency * overhead
modifiedTimeStart = os.stat(filename).st_mtime # Time file last modified
time.sleep(writeFrequency) # wait writeFrequency # of secs
modifiedTimeEnd = os.stat(filename).st_mtime # File modification time again
if 0 < (modifiedTimeEnd - modifiedTimeStart) <= maxWriteFrequency:
return True
else:
return False
if not isFileBeingWrittenInto('fileForSafeWrites.txt'):
handle = open('fileForSafeWrites.txt', 'a')
handle.write("Text written safely when no one else is writing to the file")
handle.close()
</code></pre>
<p>这不能进行真正的并发检查,但可以与各种其他方法结合使用,以安全地写入到文件中,而不必担心出现乱码。希望它能帮助下一个想办法做到这一点的人。在</p>
<p><strong>编辑更新</strong>:</p>
<p>在进一步的测试中,我遇到了一个高频写入过程,需要从中修改条件逻辑</p>
^{pr2}$
<p>到</p>
<pre><code>if 0 < (modifiedTimeEnd - modifiedTimeStart) <= maxWriteFrequency
</code></pre>
<p>这在理论上和实践上都是一个更好的答案。在</p>