gpt4 book ai didi

python - portalocker 似乎没有锁定

转载 作者:太空狗 更新时间:2023-10-30 02:56:49 26 4
gpt4 key购买 nike

我有一种检查点文件,有时我希望通过各种 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com