作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一种检查点文件,有时我希望通过各种 python 程序对其进行修改。我加载文件,尝试使用 portalocker 锁定它,更改它,而不是解锁并关闭它。
但是,portalocker 在最简单的情况下不起作用。我创建了一个简单的文件:
$echo "this is something here" >> test
$python
Python 3.5.2 (default, Jul 5 2016, 12:43:10)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import portalocker
>>> f = open("test",'w')
>>> portalocker.lock(f, portalocker.LOCK_EX)
同时我仍然可以在另一个终端打开它:
$python
Python 3.5.2 (default, Jul 5 2016, 12:43:10)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> fl = open("test",'w')
>>> fl.write("I can still overwrite this\n")
>>> fl.close()
然后我关闭第一个,并检查文件:
>>> portalocker.unlock(f)
>>> f.close()
>>>
$ cat test
I can still overwrite this
我做错了什么?
最佳答案
问题是,默认情况下,Linux 使用咨询锁。 To enable mandatory locking (which you are referring to) the filesytem needs to be mounted with the mand
option .咨询锁定系统实际上有几个优点,但如果您不期望它,可能会造成混淆。
为了确保您的代码在这两种情况下都能正常工作,我建议使用储物柜封装这两个打开的调用。
例如,在 2 个独立的 Python 实例中尝试这个:
import portalocker
with portalocker.Lock('test') as fh:
fh.write('first instance')
print('waiting for your input')
input()
现在从第二个实例开始:
import portalocker
with portalocker.Lock('test') as fh:
fh.write('second instance')
Ps: 我是portalocker包的维护者
关于python - portalocker 似乎没有锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39292051/
我有一种检查点文件,有时我希望通过各种 python 程序对其进行修改。我加载文件,尝试使用 portalocker 锁定它,更改它,而不是解锁并关闭它。 但是,portalocker 在最简单的情况
我不明白为什么 Portalocker 没有正常失败并显示消息“有一个锁定文件”。相反,它失败并出现以下错误: portalocker.exceptions.LockException: [Errno
我是一名优秀的程序员,十分优秀!