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实现的各种排序算法代码
Mar 04 Python
python关键字and和or用法实例
May 28 Python
Python利用递归和walk()遍历目录文件的方法示例
Jul 14 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
利用python编写一个图片主色转换的脚本
Dec 07 Python
利用numpy和pandas处理csv文件中的时间方法
Apr 19 Python
从0开始的Python学习016异常
Apr 08 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
Jun 25 Python
python实现的按要求生成手机号功能示例
Oct 08 Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 Python
flask项目集成swagger的方法
Dec 09 Python
Pycharm 跳转回之前所在页面的操作
Feb 05 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 分页类 扩展代码
2009/06/11 PHP
php5.3 注意事项说明
2013/07/01 PHP
提高php编程效率技巧
2015/08/13 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
JavaScript语言核心数据类型和变量使用介绍
2013/08/23 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
jquery Easyui快速开发总结
2015/08/20 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
2020/11/25 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
Vue2.0实现简单分页及跳转效果
2019/07/29 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
详解Swift中属性的声明与作用
2016/06/30 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
Python 移动光标位置的方法
2019/01/20 Python
Python实现微信小程序支付功能
2019/07/25 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
Tensorflow tensor 数学运算和逻辑运算方式
2020/06/30 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
Otticanet澳大利亚:最顶尖的世界名牌眼镜, 能得到打折季的价格
2018/08/23 全球购物
AJAX应用和传统Web应用有什么不同
2013/08/24 面试题
自我鉴定范文300字
2013/10/01 职场文书
中学生操行评语大全
2014/04/24 职场文书
党的群众路线教育实践活动个人对照检查材料范文
2014/09/25 职场文书
专职安全员岗位职责
2015/04/11 职场文书
请假条应该怎么写?
2019/06/24 职场文书
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL
Java实现聊天机器人完善版
2021/07/04 Java/Android
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python
MySQL去除密码登录告警的方法
2022/04/20 MySQL