xxxmenger 发表于 2017-5-7 13:37:50

python之跨进程锁的实现---fcntl

============================================================================
原创作品,允许转载。转载时请务必以超链接形式标明原始出处、以及本声明。

请注明转自: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/
页: [1]
查看完整版本: python之跨进程锁的实现---fcntl