Я озадачен поведением функции lockf из библиотеки python fcntl: я не могу получить разделяемую блокировку, в то время как эксклюзивная работает:
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]: ????
Код ошибки соответствует EBADF из http://man7.org/linux/man-pages/man3/lockf.3.html, что не имеет особого смысла, так как f — дескриптор открытого файла с возможностью записи.
Любые идеи?
(Питон 3.6.9, Ubuntu 18.04.4 LTS)