python之跨进程锁的实现---fcntl
程序员文章站
2022-06-14 10:06:13
...
============================================================================
原创作品,允许转载。转载时请务必以超链接形式标明原始出处、以及本声明。
请注明转自: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/
推荐阅读
-
python基于mysql实现的简单队列以及跨进程锁实例详解
-
python 之 并发编程(守护线程与守护进程的区别、线程互斥锁、死锁现象与递归锁、信号量、GIL全局解释器锁)
-
python之跨进程锁的实现---fcntl
-
python基于mysql实现的简单队列以及跨进程锁
-
python基于mysql实现的简单队列以及跨进程锁实例详解
-
python基于mysql实现的容易队列以及跨进程锁
-
python基于mysql实现的简单队列以及跨进程锁实例详解
-
python 之 并发编程(守护线程与守护进程的区别、线程互斥锁、死锁现象与递归锁、信号量、GIL全局解释器锁)
-
python基于mysql实现的容易队列以及跨进程锁