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 for Informatics 第11章 正则表达式(一)
Apr 21 Python
Python3.x对JSON的一些操作示例
Sep 01 Python
基于Django filter中用contains和icontains的区别(详解)
Dec 12 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
Python3爬虫全国地址信息
Jan 05 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
Dec 04 Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 Python
在django中使用apscheduler 执行计划任务的实现方法
Feb 11 Python
Python ckeditor富文本编辑器代码实例解析
Jun 22 Python
用Python的绘图库(matplotlib)绘制小波能量谱
Apr 17 Python
PyTorch dropout设置训练和测试模式的实现
May 27 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的五种设计模式
2012/09/05 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
制作安全性高的PHP网站的几个实用要点
2014/12/30 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
JavaScript 开发中规范性的一点感想
2009/06/23 Javascript
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
js 数组去重的四种实用方法
2014/09/09 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
2015/08/22 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
2016/01/24 Javascript
javascript对象的相关操作小结
2016/05/16 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
微信小程序实现简易table表格
2020/06/19 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
Python中的匿名函数使用简介
2015/04/27 Python
Python中多个数组行合并及列合并的方法总结
2018/04/12 Python
python装饰器代替set get方法实例
2019/12/19 Python
Python figure参数及subplot子图绘制代码
2020/04/18 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
2020/12/23 Python
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
捷克鲜花配送:Florea.cz
2018/10/29 全球购物
建筑总经理岗位职责
2014/02/02 职场文书
竞聘书格式及范文
2014/03/31 职场文书
教师业务培训方案
2014/05/01 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
2015年三八妇女节活动总结
2015/02/06 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
python绘制箱型图
2021/04/27 Python