我正在尝试定义函数以简化使用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")
。我的错误处理不合适吗?我还尝试了True
,except IOError:
和except Exception:
- 我不明白为什么在单独运行fcntl命令时引发的BlockingIOError并不会导致{ {1}}要执行的逻辑。
答案 0 :(得分:0)
所以,问题似乎是文件被垃圾收集,因为函数后没有使用句柄lock_file
。如果将return
语句修改为return lock_file
,则会实现所需的行为。