============================================================================
原创作品,允许转载。转载时请务必以超链接形式标明原始出处、以及本声明。
请注明转自: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/