日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 中给文件加锁——fcntl模块

發布時間:2025/3/21 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 中给文件加锁——fcntl模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果沒有fcntl模塊則用

sudo pip install fcntl安裝

模塊簡單說明:

  打開文件,不存在則創建之
  f = open('./test','w')
  fcntl.flock(f,fcntl.LOCK_EX)
  這樣就對文件test加鎖了,如果有其他進程對test文件加鎖,則不能成功,會被阻塞,但不會退出程序。
  解鎖:fcntl.flock(f,fcntl.LOCK_UN)

fcntl模塊:
  flock() : flock(f, operation)
  operation : 包括:
  fcntl.LOCK_UN 解鎖
  fcntl.LOCK_EX 排他鎖
  fcntl.LOCK_SH 共享鎖
  fcntl.LOCK_NB 非阻塞鎖
  LOCK_SH 共享鎖:所有進程沒有寫訪問權限,即使是加鎖進程也沒有。所有進程有讀訪問權限。
  LOCK_EX 排他鎖:除加鎖進程外其他進程沒有對已加鎖文件讀寫訪問權限。
  LOCK_NB 非阻塞鎖:
  如果指定此參數,函數不能獲得文件鎖就立即返回,否則,函數會等待獲得文件鎖。
  LOCK_NB可以同LOCK_SH或LOCK_NB進行按位或(|)運算操作。
  fcnt.flock(f,fcntl.LOCK_EX|fcntl.LOCK_NB)

實例代碼:

  

1 #!/usr/bin/python 2 #coding:utf8 3 4 import os 5 import sys 6 import time 7 import fcntl 8 9 class FLOCK(ojbect): 10 def __init__(self,name): 11 12 self.fobj = open(name,'w') 13 self.fd = self.fobj.fileno() 14 15 def lock(self): 16 try: 17 #給文件加鎖,使用了fcntl.LOCK_NB 18 fcntl.lockf(sefl.fd,fcntl.LOCK_EX|fcntl.LOCK_NB) 19 print '給文件加鎖,稍等 ... ...' 20 time.sleep(20) 21 return True 22 except: 23 print '文件加鎖,無法執行,請稍后運行。' 24 retrun False 25 26 def unlock(self): 27 self.fobj.close() 28 print '已解鎖' 29 30 if __name__ == "__main__": 31 print sys.argv[1] 32 locker = FLOCK(sys.argv[1]) 33 a = locker.lock() 34 if a: 35 print '文件已加鎖' 36 else: 37 print '無法執行,程序已鎖定,請稍等'

執行結果:
# python lock.py test
test
file lock please waiting..... (在等待期間,在另一個終端,運行此程序會有下面的結果)
文件已加鎖

# python lock.py test
test
file no lock please check file...
無法執行,程序已鎖定,請稍等

轉載于:https://www.cnblogs.com/gide/p/8484653.html

總結

以上是生活随笔為你收集整理的python 中给文件加锁——fcntl模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。