文件互斥锁是什么? 他的应用场景又是什么?
这是我前段是开发的一个模块,主要用途是避免了多个程序多个进程需要数据安全. 可能场景我没有描述清楚,简单描述就是,解决多进程下需要的互斥锁的场景.. 对于互斥锁,我开发的,提交过的项目代码已经够多了,比如redis分布式锁,etcd分布式锁,但是就没有一个本地互斥锁 ,正好有实现的代码,也一块开源了.
尤其不严谨,python本地文件互斥锁后期会有所修改,请到原文链接中查看更新, http://xiaorui.cc/2015/11/29/%E4%BD%BF%E7%94%A8python-fcntl%E5%AE%9E%E7%8E%B0%E6%9C%AC%E5%9C%B0%E6%96%87%E4%BB%B6%E4%BA%92%E6%96%A5%E9%94%81/
代码已经推送到github和pypi上了.
https://github.com/rfyiamcool/local_mutex
https://pypi.python.org/pypi/local_mutex
我要开始正经的介绍这项目了,本地互斥锁的英文名是, local_mutex
功能介绍, 一个简单的本地锁, 通过fcntl针对文件实现加锁. 可以起到多个进程下互斥锁的效果. 需要强烈注意的是,多线程下是无效的,原因? 自己查fcntl的特性,再说也没必要用fcntl内核锁
Usage:
最简单的例子,适合一个程序同时跑一个的场景.
#blog: xiaorui.cc import sys from local_mutex import LocalMutex try: lock = LocalMutex('app.lock') except LockError: sys.exit('already running') try: print 'doing' finally: lock.release()
使用wait参数不停的试图获取Lock, 直到获取锁.
#blog : xiaorui.cc lock = LocalMutex('/var/run/app.lock', wait = True) try: print 'doing' finally: lock.release()
使用with关键词
#blog: xiaorui.cc with LocalMutex('app.lock', wait = True): print 'doing'
有个哥们发邮件一直问我,如果是多线程环境, 怎么搞? 你mei呀,不知道threading下有个Lock()互斥锁呀…. 直接用threading的Lock就搞定了…
import threading lock = threading.Lock() with lock: pass
就这样了,有兴趣的朋友可以用用. 另外这个场景也比较适合crontab下,避免除非执行的效果.