Python实现的flock是否能够与标准C库透明地配合使用?如果我有两个程序,一个是Python,另一个是C,尝试在单个文件上获取锁,它会工作吗?
快速链接:
- Python flock: https://docs.python.org/2/library/fcntl.html
- Linux flock: http://linux.die.net/man/2/flock
Python实现的flock是否能够与标准C库透明地配合使用?如果我有两个程序,一个是Python,另一个是C,尝试在单个文件上获取锁,它会工作吗?
快速链接:
Python的fcntl
库是直接建立在标准C库之上的;因此,在Linux上,fcntl.flock()
直接使用flock
C函数。
请参见fcntl
模块的源代码:
#ifdef HAVE_FLOCK
Py_BEGIN_ALLOW_THREADS
ret = flock(fd, code);
Py_END_ALLOW_THREADS
fcntl.flock()
文档中也有明确说明:
所以,是的,它会起作用。
fcntl.flock(fd, op)
对文件描述符fd(提供fileno()
方法的文件对象也被接受)执行锁定操作op。详见Unix手册flock(2)。(在某些系统上,此函数是使用fcntl()
模拟的。)