擅长:python、mysql、java
<p>这在linuxel6上适用。
使用FileLock和Python2.6的OracleJava7可以正确地锁定文件。
编辑:使用F_SETLKW进行阻塞/等待操作。在</p>
<p>Python代码不可移植。在我的环境里这不是问题。在</p>
<pre><code>import fcntl, struct, time
f = open("/tmp/TestLock","w")
lockdata = struct.pack('hhllhh', fcntl.F_WRLCK, 0, 0, 0, 0, 0)
unlockdata = struct.pack('hhllhh', fcntl.F_UNLCK, 0, 0, 0, 0, 0)
while True:
try:
fcntl.fcntl(f.fileno(),fcntl.F_SETLK, lockdata)
print "Lock held"
time.sleep(5)
except IOError as ex:
print "Lock failed: "+ex.strerror
if ex.errno == 11:
time.sleep(0.5)
else:
break
continue
else:
fcntl.fcntl(f.fileno(),fcntl.F_SETLK, unlockdata)
</code></pre>
<p>参考号:<a href="https://docs.python.org/2/library/fcntl.html" rel="nofollow">https://docs.python.org/2/library/fcntl.html</a>
SVR4搜索页面(在底部)</p>
<p>参考号:<a href="https://community.dur.ac.uk/physics.astrolab/file_locking.html" rel="nofollow">https://community.dur.ac.uk/physics.astrolab/file_locking.html</a></p>