使用fcntl在Python中锁定文件

时间:2018-03-01 11:22:01

标签: python exception-handling locking fcntl

我正在尝试定义函数以简化使用fcntl模块锁定文件的过程。我手动运行时

<input type="number" name="overs" step="0.1">

在两个单独的Python实例中,我得到了预期的异常

fcntl.lockf(lock_file, fcntl.LOCK_EX | fcntl.LOCK_NB)

但是当我在BlockingIOError: [Errno 11] Resource temporarily unavailable 中定义要自动化的函数时:

mylock.py

然后将其导入两个单独的python实例并执行

import fcntl

def lock(filepath):
    lock_file = open(filepath, "a")
    try:
        fcntl.lockf(lock_file, fcntl.LOCK_EX | fcntl.LOCK_NB)
    except OSError or BlockingIOError:
        return False
    return True

def unlock(filepath):
    lock_file = open(filepath, "a")
    try:
        fcntl.lockf(lock_file, fcntl.LOCK_UN)
    except OSError or BlockingIOError:
        return False
    return True

在两个实例中意外返回mylock.lock("test.txt") 。我的错误处理不合适吗?我还尝试了Trueexcept IOError:except Exception: - 我不明白为什么在单独运行fcntl命令时引发的BlockingIOError并不会导致{ {1}}要执行的逻辑。

1 个答案:

答案 0 :(得分:0)

所以,问题似乎是文件被垃圾收集,因为函数后没有使用句柄lock_file。如果将return语句修改为return lock_file,则会实现所需的行为。