编程语言
首页 > 编程语言> > python – 文件锁未按预期工作

python – 文件锁未按预期工作

作者:互联网

我有一个Thread-extends类,它应该一次只运行一个实例(跨进程).为了实现这一点,我正在尝试使用文件锁.以下是我的代码:

class Scanner(Thread):

  def __init__(self, path):
    Thread.__init__(self)
    self.lock_file = open(os.path.join(config.BASEDIR, "scanner.lock"), 'r+')
    fcntl.lockf(self.lock_file, fcntl.LOCK_EX | fcntl.LOCK_NB)

  # Stuff omitted

  def run(self):
    logging.info("Starting scan on %s" % self.path)

    # More stuff omitted

    fcntl.lockf(self.lock_file, fcntl.LOCK_UN)

如果Scanner线程已经在运行并且根本没有初始化对象,我期望lockf调用抛出异常.但是,我可以在终端中看到这个:

INFO:root:Starting scan on /home/felix/Music
INFO:root:Starting scan on /home/felix/Music
INFO:root:Scan finished
INFO:root:Scan finished

这表明两个Scanner线程同时运行,没有异常抛出.我确定我在这里遗漏了一些非常基本的东西,但我似乎无法弄清楚那是什么.有人可以帮忙吗?

解决方法:

最后我自己找到了解决方案.它是使用fcntl.flock()而不是fcntl.lockf(),使用完全相同的参数.不知道为什么会有所作为.

标签:python,file-io,filelock
来源: https://codeday.me/bug/20190621/1255504.html