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中itertools模块用法详解
Sep 25 Python
python脚本爬取字体文件的实现方法
Apr 29 Python
对tf.reduce_sum tensorflow维度上的操作详解
Jul 26 Python
Python Numpy:找到list中的np.nan值方法
Oct 30 Python
Django框架使用内置方法实现登录功能详解
Jun 12 Python
获取Pytorch中间某一层权重或者特征的例子
Aug 17 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
Aug 23 Python
Python 限定函数参数的类型及默认值方式
Dec 24 Python
tf.concat中axis的含义与使用详解
Feb 07 Python
pycharm 代码自动补全的实现方法(图文)
Sep 18 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
Nov 20 Python
python爬取股票最新数据并用excel绘制树状图的示例
Mar 01 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
德生PL990的分析评价
2021/03/02 无线电
SONY SRF-M100的电路分析
2021/03/02 无线电
php session 检测和注销
2009/03/16 PHP
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
javascript算法学习(直接插入排序)
2011/04/12 Javascript
javascript针对DOM的应用分析(四)
2012/04/15 Javascript
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
node.js微信公众平台开发教程
2016/03/04 Javascript
JavaScript实现倒计时跳转页面功能【实用】
2016/12/13 Javascript
详解微信小程序Radio选中样式切换
2017/07/06 Javascript
微信小程序 数据绑定及运算的简单实例
2017/09/20 Javascript
js读取本地文件的实例
2017/12/22 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
Vue自动构建发布脚本的方法示例
2020/07/24 Javascript
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
mac系统安装Python3初体验
2018/01/02 Python
对Python中内置异常层次结构详解
2018/10/18 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
Python3进制之间的转换代码实例
2019/08/24 Python
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
Python selenium文件上传下载功能代码实例
2020/04/13 Python
会计专业毕业生自我鉴定
2013/10/29 职场文书
护士自我鉴定怎么写
2014/02/07 职场文书
出纳员岗位责任制
2014/02/11 职场文书
投标邀请书范本
2015/02/02 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
四则混合运算教学反思
2016/02/23 职场文书
普希金诗歌赏析(6首)
2019/08/22 职场文书
Windows Server 2008配置防火墙策略详解
2022/06/28 Servers