python使用fcntl模块实现程序加锁功能示例


Posted in Python onJune 23, 2017

本文实例讲述了python使用fcntl模块实现程序加锁功能。分享给大家供大家参考,具体如下:

python 中引入给文件加锁的 fcntl模块

import fcntl

打开一个文件

##当前目录下test文件要先存在,如果不存在会报错。或者以写的方式打开
f = open('./test')

对该文件加密:

fcntl.flock(f,fcntl.LOCK_EX)

这样就对文件test加锁了,如果有其他进程对test文件加锁,则不能成功,会被阻塞,但不会退出程序。

解锁:fcntl.flock(f,fcntl.LOCK_UN)

fcntl模块:

flock() : flock(f, operation)

operation : 包括:
    fcntl.LOCK_UN 解锁
    fcntl.LOCK_EX  排他锁
    fcntl.LOCK_SH  共享锁
    fcntl.LOCK_NB  非阻塞锁

LOCK_SH 共享锁:所有进程没有写访问权限,即使是加锁进程也没有。所有进程有读访问权限。

LOCK_EX 排他锁:除加锁进程外其他进程没有对已加锁文件读写访问权限。
LOCK_NB 非阻塞锁:
如果指定此参数,函数不能获得文件锁就立即返回,否则,函数会等待获得文件锁。

LOCK_NB可以同LOCK_SH或LOCK_NB进行按位或(|)运算操作。 fcnt.flock(f,fcntl.LOCK_EX|fcntl.LOCK_NB)

请看示例:

import sys
import time
import fcntl
class FLOCK(object):
 def __init__(self, name):
  self.fobj = open(name, 'w')
  self.fd = self.fobj.fileno()
 def lock(self):
  try:
   fcntl.lockf(self.fd, fcntl.LOCK_EX | fcntl.LOCK_NB) # 给文件加锁,使用了fcntl.LOCK_NB
   print '给文件加锁,稍等 ... ...'
   time.sleep(20)
   return True
  except:
   print '文件加锁,无法执行,请稍后运行。'
   return False
def unlock(self):
 self.fobj.close()
 print '已解锁'
if __name__ == "__main__":
 print sys.argv[1]
 locker = FLOCK(sys.argv[1])
 a = locker.lock()
 if a:
  print '文件已加锁'
 else:
  print '无法执行,程序已锁定,请稍等'

先运行一个终端会打印:

python lockfile.py test

test

给文件加锁,稍等 ... ...

文件已加锁

运行另外一个终端:

test
     文件加锁,无法执行,请稍后运行。
     无法执行,程序已锁定,请稍等

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python端口扫描系统实现方法
Nov 19 Python
Python切片知识解析
Mar 06 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
Jan 20 Python
PyQt5主窗口动态加载Widget实例代码
Feb 07 Python
Python使用jsonpath-rw模块处理Json对象操作示例
Jul 31 Python
人工神经网络算法知识点总结
Jun 11 Python
python3 深浅copy对比详解
Aug 12 Python
python如何将多个PDF进行合并
Aug 13 Python
QML使用Python的函数过程解析
Sep 26 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
关于Theano和Tensorflow多GPU使用问题
Jun 19 Python
python实现移动木板小游戏
Oct 09 Python
Django自定义认证方式用法示例
Jun 23 #Python
Django实现的自定义访问日志模块示例
Jun 23 #Python
详解Python文本操作相关模块
Jun 22 #Python
python字符串过滤性能比较5种方法
Jun 22 #Python
Python编程实现的简单Web服务器示例
Jun 22 #Python
Python实现复杂对象转JSON的方法示例
Jun 22 #Python
Collatz 序列、逗号代码、字符图网格实例
Jun 22 #Python
You might like
PHP下对数组进行排序的函数
2010/08/08 PHP
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
2020/04/23 PHP
页面载入结束自动调用js函数示例
2013/09/23 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
javascript原型链学习记录之继承实现方式分析
2019/05/01 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
python动态网页批量爬取
2016/02/14 Python
python实现txt文件格式转换为arff格式
2018/05/31 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
深入浅析Python 函数注解与匿名函数
2020/02/24 Python
Python sql注入 过滤字符串的非法字符实例
2020/04/03 Python
jupyter notebook中新建cell的方法与快捷键操作
2020/04/22 Python
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
C语言笔试集
2012/07/24 面试题
优秀演讲稿范文
2013/12/29 职场文书
学生会主席事迹材料
2014/01/28 职场文书
《乞巧》教学反思
2014/02/27 职场文书
新农村建设标语
2014/06/24 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
影视后期实训报告
2014/11/05 职场文书
2014年小学美术工作总结
2014/12/20 职场文书
刑事起诉书范文
2015/05/19 职场文书
公务员岗前培训心得体会
2016/01/08 职场文书
《静夜思》教学反思
2016/02/17 职场文书