2
flock的python實現是否與標準C庫一起透明地工作?如果我有兩個程序,一個在Python中,另一個在C中,試圖在單個文件上獲取鎖定,它會起作用嗎?C和Python之間的文件鎖定(flock)兼容性
快速鏈接:
- Python的羊羣:https://docs.python.org/2/library/fcntl.html
- Linux的羊羣:http://linux.die.net/man/2/flock
flock的python實現是否與標準C庫一起透明地工作?如果我有兩個程序,一個在Python中,另一個在C中,試圖在單個文件上獲取鎖定,它會起作用嗎?C和Python之間的文件鎖定(flock)兼容性
快速鏈接:
Python的fcntl
庫直接構建在標準C庫的頂部;所以在Linux上fcntl.flock()
使用flock
C函數直接。
見source code for the fcntl
module:
#ifdef HAVE_FLOCK
Py_BEGIN_ALLOW_THREADS
ret = flock(fd, code);
Py_END_ALLOW_THREADS
這在fcntl.flock()
documentation明確規定,以及:
fcntl.flock(fd, op)
文件描述符FD(文件對象執行鎖定操作的運算提供fileno()
方法也被接受)。有關詳細信息,請參閱Unix手冊羣(2)。 (在某些系統上,使用fcntl()
模擬此功能。)
所以是的,它會工作。
在Linux 2.6.11或更高版本內核(包括3.x,4.x等)中,[flock()](http://man7.org/linux/man-pages/man2/flock .2.html)在NFS捲上工作(如果NFS服務器配置爲支持文件鎖定)。舊版內核和其他操作系統並非如此。如果您使用的是商業Web主機,這也是一個非常實際的問題;那些使用NFS和一些* BSD變體的服務器往往會錯誤配置他們的NFS服務器,因此不支持文件鎖定(鎖定在每個前端都是本地的!)。 –
@NominalAnimal:迷人。所有這些都與Python公開的鎖定實現有什麼關係,以及該實現是否與C和C++可用的實現兼容? –
您回答了問題*「Python的Python實現是否與標準C庫一起透明地工作?」*。我的評論意在作爲關於*的說明*「如果我有兩個程序,一個在Python中,另一個在C中,試圖獲得對單個文件的鎖定,它會起作用嗎?」*問題還問到。你認爲我的評論是多餘的還是不相關的? –