【发布时间】:2016-01-14 23:15:54
【问题描述】:
我正在实现基于文件锁的互斥机制。我的脚本的其他实例知道它们在遇到特定文件时不应该运行,该文件被锁定。
为了实现这一点,我使用fcntl.flock 创建并锁定了文件。当我释放锁时,我还想清理文件,当没有进程实际运行时,它不会坐在那里指示旧的 pid。
我的问题是,我应该何时以及如何清理文件,尤其是在什么时候可以删除它。基本上我看到两个选项:
- 在释放锁之前截断并删除文件
- 锁释放后截断并删除文件
据我了解,每一个都将我的应用程序暴露在稍微不同的竞争条件下。什么是最佳做法,我错过了什么?
这是一个(过于简化的)示例:
import fcntl
import os
import sys
import time
# open file for read/write, create if necessary
with open('my_lock_file.pid', 'a+') as f:
# acquire lock, raises exception if lock is hold by another process
try:
fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
except IOError:
print 'other process running:', f.readline()
sys.exit()
try:
# do something
f.write('%d\n' % os.getpid())
f.flush()
# more stuff here ...
time.sleep(5)
finally:
# clean up here?
# release lock
fcntl.flock(f, fcntl.LOCK_UN)
# clean up here?
# clean up here?
【问题讨论】:
标签: python ipc delete-file flock