Python Lockf:LOCK_EX有效,但LOCK_SH不起作用



我对python fcntl库中lockf函数的行为感到困惑:我无法获得共享锁,而独占锁有效:

In [1]: import fcntl                                                            
In [2]: f = open('file', 'w')                                                   
In [3]: fcntl.lockf(f, fcntl.LOCK_SH | fcntl.LOCK_NB)                           
---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-3-5d23c6a5f968> in <module>
----> 1 fcntl.lockf(f, fcntl.LOCK_SH | fcntl.LOCK_NB)
OSError: [Errno 9] Bad file descriptor
In [4]: fcntl.lockf(f, fcntl.LOCK_EX | fcntl.LOCK_NB)                           
In [5]: 🤔

错误代码对应于http://man7.org/linux/man-pages/man3/lockf.3.html,这没有多大意义,因为f是一个可写的打开文件描述符。

有什么想法吗?

(Python 3.6.9,Ubuntu 18.04.4 LTS(

fcntl.lockf看起来确实应该是POSIXlockf的包装器,但事实并非如此。POSIXlockf甚至没有共享锁。

fcntl.lockf是POSIXfcntl的包装器。LOCK_SH对应于F_RDLCK,它需要打开一个文件描述符来读取

当你在做的时候,你可能想了解一下文件锁定的问题。

相关内容

  • 没有找到相关文章

最新更新