咱們在寫python應用的時候,當涉及到多個進程向同一個文件write(或者read)的狀況,若是幾個進程同時都對這個文件進行寫操做,那麼文件的內容就會變得很是混亂,這個時候文件鎖就派上用場了。python
python中的文件鎖,能夠保證同時只有一個進程寫文件,目前使用的是fcntl這個庫,它實際上爲 Unix上的ioctl,flock和fcntl 函數提供了一個接口。python經過調用fcntl.flock()函數對文件加鎖。併發
fcntl這個模塊是Python自帶的,但Windows沒有,能夠手工下載fcntl.py文件,而後保存到python的Lib目錄下。函數
例如:一個文件設置了排它鎖,若是這個鎖已經被某個進程獲取了,那麼其餘進程請求獲取這個鎖的時候將會被阻塞。
若是想要在沒有得到這個排他鎖的狀況下不阻塞那些進程,能夠與 LOCK_NB 聯合使用,那麼系統就不會阻塞該進程。即: fcnt.flock(f,fcntl.LOCK_EX|fcntl.LOCK_NB)spa
import fcntl class Lock(object): def __init__(self, file_name): self.file_name = file_name self.handle = open(file_name, 'w+') def lock(self): fcntl.flock(self.handle, fcntl.LOCK_EX | fcntl.LOCK_NB) def unlock(self): fcntl.flock(self.handle, fcntl.LOCK_UN) def __del__(self): try: self.handle.close() except: pass