2016-08-26 46 views

回答

2

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()模擬此功能。)

所以是的,它會工作。

+0

在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服務器,因此不支持文件鎖定(鎖定在每個前端都是本地的!)。 –

+0

@NominalAnimal:迷人。所有這些都與Python公開的鎖定實現有什麼關係,以及該實現是否與C和C++可用的實現兼容? –

+0

您回答了問題*「Python的Python實現是否與標準C庫一起透明地工作?」*。我的評論意在作爲關於*的說明*「如果我有兩個程序,一個在Python中,另一個在C中,試圖獲得對單個文件的鎖定,它會起作用嗎?」*問題還問到。你認爲我的評論是多餘的還是不相關的? –