fcntl
是 Python 中的一個庫,用于處理文件描述符的鎖定和解鎖
以下是一個簡單的示例,說明如何使用 fcntl
處理并發訪問:
import os
import fcntl
import threading
# 定義一個鎖文件路徑
lock_file = "lockfile.lock"
def acquire_lock(lock_file):
# 使用 'w' 模式打開文件,如果文件不存在則創建
with open(lock_file, 'w') as f:
# 使用 fcntl.flock() 獲取文件鎖定
fcntl.flock(f, fcntl.LOCK_EX) # 獲取獨占鎖
print(f"{threading.current_thread().name} 獲取到鎖")
# 在這里執行需要同步的操作
pass
def release_lock(lock_file):
with open(lock_file, 'w') as f:
# 使用 fcntl.flock() 釋放文件鎖定
fcntl.flock(f, fcntl.LOCK_UN) # 釋放鎖
print(f"{threading.current_thread().name} 釋放鎖")
# 創建兩個線程模擬并發訪問
t1 = threading.Thread(target=acquire_lock, args=(lock_file,))
t2 = threading.Thread(target=acquire_lock, args=(lock_file,))
t3 = threading.Thread(target=release_lock, args=(lock_file,))
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
在這個示例中,我們創建了兩個線程 t1
和 t2
來模擬并發訪問。它們都嘗試獲取同一個鎖文件(lockfile.lock
)的獨占鎖。當 t1
獲取到鎖時,t2
將等待直到鎖被釋放。同樣,當 t3
運行并釋放鎖時,t1
和 t2
中的任何一個都可以獲取到鎖并執行同步操作。
注意:這個示例僅用于演示目的,實際應用中可能需要根據具體需求進行調整。