Python 標准庫之 fcntl


 

 

在 linux 環境下用 Python 進行項目開發過程中經常會遇到多個進程對同一個文件進行讀寫問題,而此時就要對文件進行加鎖控制,在 Python 的 linux 版本下有個 fcntl 模塊可以方便的對文件進行加、解鎖控制。

import fcntl
file_path = "/home/ubuntu/aaa.json"
f = open(file_path, 'w')
fcntl.flock(f.fileno(), fcntl.LOCK_EX)	# 加鎖,其它進程對文件操作則不能成功
f.write("something")
fcntl.flock(f.fileno(), fcntl.LOCK_UN)	# 解鎖
f.close()

fcntl.flock(f.fileno(), operation) operation 的操作包括以下選項:

  • fcntl.LOCK_EX

    排他鎖: 除加鎖進程外其他進程沒有對已加鎖文件讀寫訪問權限

  • fcntl.LOCK_UN

    解鎖: 對加鎖文件進行解鎖

  • fcntl.LOCK_SH

    共享鎖: 所有進程都沒有寫權限,即使加鎖進程也沒有,但所有進程都有讀權限

  • fcntl.LOCK_NB

    非阻塞鎖: 如果指定此參數,函數不能獲得文件鎖就立即返回,否則,函數會等待獲得文件鎖。

    LOCK_NB可以同LOCK_SH或LOCK_NB進行按位或(|)運算操作。

    fcnt.flock(f.fileno(),fcntl.LOCK_EX|fcntl.LOCK_NB)
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM