Python简单进程锁代码实例


Posted in Python onApril 27, 2015

先说说线程

在多线程中,为了保证共享资源的正确性,我们常常会用到线程同步技术.
将一些敏感操作变成原子操作,保证同一时刻多个线程中只有一个线程在执行这个原子操作。
我最常用的是互斥锁,也称独占锁。其次还有读写锁,信号量,条件变量等。
除此之外,我们在进程间通信时会用到信号,向某一个进程发送信号,该进程中设置信号处理函数,然后当该进程收到信号时,执行某些操作。
其实在线程中,也可以接受信号,利用这种机制,我们也可以用来实现线程同步。更多信息见 https://3water.com/article/64977.htm

再说说进程

进程里我们通过一些进程间通信方式,可以实现进程间的同步。
最近我遇到的一个情况是,某采集系统进程池中很多进程会向同一个日志文件中打印日志,如果通过进程间通信实现,比较麻烦。
还有一种办法,如果采用共享内存的方式,不同的进程分别将日志消息通过共享内存放入一个线程安全的队列中,再建立一个进程负责专门打印日志,这样也可以保证不被大乱,
保证日志的正确性,但代码量也很多阿。
还有一种办法,在共享内存中设置一个互斥锁,所有进程共享。
如果能像线程一样,有一个简单的互斥锁,用的时候只要加锁,就能实现进程间的互斥就好了。之前对文件加锁,也有些印象,于是我用它实现了一个进程间的互斥锁

#coding=utf-8 
 
""" 
Process mutex lock. 
Actually it is implemented by file lock. 
""" 
 
import fcntl 
 
class ProcessLock(object): 
 
    __lockfd = None 
 
    @staticmethod 
    def lock(): 
        ProcessLock.__lockfd = open(__file__, 'a+') 
        fcntl.flock(ProcessLock.__lockfd, fcntl.LOCK_EX) 
 
    @staticmethod 
    def unlock(): 
        fcntl.flock(ProcessLock.__lockfd, fcntl.LOCK_UN)

加锁  ProcessLock.lock()
释放 ProcessLock.unlock()
非常简单使用,有兴趣的朋友可以试一试。

Python 相关文章推荐
Python字典操作详细介绍及字典内建方法分享
Jan 04 Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 Python
pytorch 转换矩阵的维数位置方法
Dec 08 Python
python提取包含关键字的整行数据方法
Dec 11 Python
Python从单元素字典中获取key和value的实例
Dec 31 Python
Python根据成绩分析系统浅析
Feb 11 Python
Python数据存储之 h5py详解
Dec 26 Python
详解python环境安装selenium和手动下载安装selenium的方法
Mar 17 Python
使用python客户端访问impala的操作方式
Mar 28 Python
python Gabor滤波器讲解
Oct 26 Python
python中PyQuery库用法分享
Jan 15 Python
Python Spyder 调出缩进对齐线的操作
Feb 26 Python
在Python中使用列表生成式的教程
Apr 27 #Python
讲解Python中的递归函数
Apr 27 #Python
理解Python中函数的参数
Apr 27 #Python
Python中自定义函数的教程
Apr 27 #Python
在Python中使用dict和set方法的教程
Apr 27 #Python
在Python中使用判断语句和循环的教程
Apr 25 #Python
详解Python中列表和元祖的使用方法
Apr 25 #Python
You might like
php去除换行(回车换行)的三种方法
2014/03/26 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
PHP使用Redis替代文件存储Session的方法
2017/02/15 PHP
图片自动缩小 点击放大
2008/07/07 Javascript
IE6与IE7中,innerHTML获取param的区别
2009/03/15 Javascript
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
2011/10/31 Javascript
jquery导航制件jquery鼠标经过变色效果示例
2013/12/05 Javascript
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
jQuery中replaceWith()方法用法实例
2014/12/25 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
jQuery使用cookie与json简单实现购物车功能
2016/04/15 Javascript
微信小程序 基础知识css样式media标签
2017/02/15 Javascript
老生常谈javascript的面向对象思想
2017/08/22 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
Vue.directive()的用法和实例详解
2018/03/04 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
vuejs 制作背景淡入淡出切换动画的实例
2018/09/01 Javascript
详解vscode中vue代码颜色插件
2018/10/11 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
2018/12/20 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
python实现巡检系统(solaris)示例
2014/04/02 Python
python画图把时间作为横坐标的方法
2019/07/07 Python
python isinstance函数用法详解
2020/02/13 Python
python线程里哪种模块比较适合
2020/08/02 Python
Django rest framework分页接口实现原理解析
2020/08/21 Python
如何利用Python 进行边缘检测
2020/10/14 Python
CSS3教程:新增加的结构伪类
2009/04/02 HTML / CSS
学生会离职感言
2014/02/11 职场文书
领导班子自我剖析材料
2014/08/16 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
详解用Python把PDF转为Word方法总结
2021/04/27 Python
php实例化对象的实例方法
2021/11/17 PHP