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的词法分析与语法分析
May 18 Python
Pyramid Mako模板引入helper对象的步骤方法
Nov 27 Python
Python的迭代器和生成器使用实例
Jan 14 Python
深入理解 Python 中的多线程 新手必看
Nov 20 Python
PyQt4实现下拉菜单可供选择并打印出来
Apr 20 Python
在ubuntu16.04中将python3设置为默认的命令写法
Oct 31 Python
使用Python调取任意数字资产钱包余额功能
Aug 15 Python
Numpy之将矩阵拉成向量的实例
Nov 30 Python
Python调用shell命令常用方法(4种)
May 11 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
May 24 Python
Keras中的多分类损失函数用法categorical_crossentropy
Jun 11 Python
深度学习小工程练习之垃圾分类详解
Apr 14 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
浅谈discuz密码加密的方式
2014/05/22 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
2014/11/04 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
JavaScript 的方法重载效果
2009/08/07 Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
2012/05/24 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
在vscode中统一vue编码风格的方法
2018/02/22 Javascript
Angular4.0动画操作实例详解
2019/05/10 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
解决vue-router 嵌套路由没反应的问题
2020/09/22 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
2020/10/01 Javascript
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
详细介绍Python中的偏函数
2015/04/27 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
python使用sqlite3时游标使用方法
2018/03/13 Python
学习python分支结构
2019/05/17 Python
python 绘制拟合曲线并加指定点标识的实现
2019/07/10 Python
Python二维码生成识别实例详解
2019/07/16 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
浅谈python3打包与拆包在函数的应用详解
2020/05/02 Python
python 制作网站小说下载器
2021/02/20 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
打架检讨书100字
2014/01/19 职场文书
关于环保的建议书400字
2014/03/12 职场文书
优秀食品类广告词
2014/03/19 职场文书
本科生自荐信
2014/06/18 职场文书
园林技术专业求职信
2014/07/28 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
2014教师教育实践活动对照检查材料思想汇报
2014/09/21 职场文书
教师岗位职责范本
2015/04/02 职场文书
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python
JavaScript实现酷炫的鼠标拖尾特效
2022/02/18 Javascript