如何锁住文件 | python 小知识
1. 什么是锁
在程序开发中,当所需资源遭到争抢的时候,通常用锁来保证数据的一致性。应用场景如如数据库,各个进程需要保证它正在单独地写一个文件,这时就要用到文件锁。
锁的种类通常由互斥锁和共享锁,互斥锁又称为为写锁,同一时刻只能有一个进行获得锁,其他进行则等待;共享锁通常是读锁,需要多个进行获得读锁权限,但不需要有写锁。
锁也可以区分锁的范围,如整个文件锁和局部锁,局部锁如数据库中行锁。
锁之所以能够实现进程的互斥,主要是依靠了系统内核里统一的资源入口控制。
2.python 如何实现锁
在 Linux 中可以使用 fcntl 包里实现锁,锁的类型和操作
LOCK_SH:设置共享(读)锁
LOCK_EX:设置独占(写)锁
LOCK_UN:解锁
我们来看一个简单的例子:
复制代码
fcntl 实现锁的调用很简单,获取锁+操作+解锁。在测试时,我们在执行上面脚本时,获得文件锁后写入文本时,如果还要其他程序向获取文件锁,就会在获取文件锁时进行等待,直到第一个程序释放锁。
另外需要注意的是,在 windows 中没有 fcntl。可以使用 msvcrt 库中的锁定函数来实现文件锁定。
以下是一个使用 msvcrt 库实现文件锁定的示例:
复制代码
3. 小结
锁可以保证资源冲突时,保证资源数据的一致性,不会出现错乱的情况,现总结如下:
锁有互斥锁和共享锁,互斥锁是独占锁,一次只能一个进程获取;而共享锁可多个进行共同获取锁,但不可是互斥锁
锁的范围可全部也可以局部
python 中可以 fcntl 和 msvcrt 实现文件锁
版权声明: 本文为 InfoQ 作者【AIWeker】的原创文章。
原文链接:【http://xie.infoq.cn/article/fd34df4438cb102a1921429f3】。文章转载请联系作者。
评论