擅长:python、mysql、java
<p>您可以使用<code>contextlib</code>创建自己的上下文管理器,并使用<code>fcntl</code>来发出锁定调用。请注意,这些可以设置为非阻塞。在</p>
<p><code>contextlib</code>和{<cd2>}都是标准库的一部分。在</p>
<p>如果要尝试使用过时的锁,可以尝试启动该进程两次,并向其中一个发出SIGKILL命令—您应该会看到另一个进程释放了锁。在</p>
<pre><code>import fcntl
import contextlib
@contextlib.contextmanager
def lock(fname):
with open(fname, "w") as f:
print "Acquiring lock"
fcntl.lockf(f, fcntl.LOCK_EX)
print "Acquired lock"
yield
print "Releasing lock"
fcntl.lockf(f, fcntl.LOCK_UN)
print "Released lock"
if __name__ == "__main__":
import os
print "PID:", os.getpid()
import time
print "Starting"
with lock("/tmp/lock-file"):
time.sleep(100)
print "Done"
</code></pre>