============================================================================
原創作品,允許轉載。轉載時請務必以超鏈接形式標明原始出處、以及本聲明。
請註明轉自:http://yunjianfei.iteye.com/blog/
============================================================================
跨進程鎖的實現方式中,基於文件鎖的方式相對來說好一點。以下貼出一個簡單的代碼:
import os
import fcntl
class Lock:
def __init__(self, filename):
self.filename = filename
# This will create it if it does not exist already
self.handle = open(filename, 'w')
# Bitwise OR fcntl.LOCK_NB if you need a non-blocking lock
def acquire(self):
fcntl.flock(self.handle, fcntl.LOCK_EX)
def release(self):
fcntl.flock(self.handle, fcntl.LOCK_UN)
def __del__(self):
self.handle.close()
# Usage
try:
lock = Lock("/tmp/lock_name.tmp")
lock.acquire()
# Do important stuff that needs to be synchronized
finally:
lock.release()
可以同時運行多份該程序來進行試驗。
這種方式的鎖有以下特點:
1. 鎖文件只在第一次調用的時候創建。
2. 鎖是通過kernel來控制的,不消耗磁盤IO
3. 這種方式的鎖只對同一個OS中的進程有效。跨服務器、OS是無效的,這時候需要選用分佈式鎖,比如Elock http://dustin.sallings.org/elock/