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 相关文章推荐
浅谈编码,解码,乱码的问题
Dec 30 Python
用python写个自动SSH登录远程服务器的小工具(实例)
Jun 17 Python
Python多线程扫描端口代码示例
Feb 09 Python
Python、 Pycharm、Django安装详细教程(图文)
Apr 12 Python
Django web框架使用url path name详解
Apr 29 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
Pytorch释放显存占用方式
Jan 13 Python
Transpose 数组行列转置的限制方式
Feb 11 Python
python 实现 hive中类似 lateral view explode的功能示例
May 18 Python
Python离线安装各种库及pip的方法
Nov 28 Python
OpenCV-Python实现油画效果的实例
Jun 08 Python
python tqdm用法及实例详解
Jun 16 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 intval的测试代码发现问题
2008/07/27 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
Nginx实现反向代理
2017/09/20 Servers
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
学习JavaScript编程语言的8张思维导图分享
2015/03/27 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
bootstrap Table服务端处理分页(后台是.net)
2017/10/19 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
微信小程序时间选择插件使用详解
2018/12/28 Javascript
AJAX在JQuery中的应用详解
2019/01/30 jQuery
JS实现电脑虚拟键盘打字测试
2020/06/24 Javascript
token 机制和实现方式
2020/12/15 Javascript
Python使用MD5加密字符串示例
2014/08/22 Python
python自动格式化json文件的方法
2015/03/11 Python
Python实现二叉搜索树
2016/02/03 Python
Python requests库用法实例详解
2018/08/14 Python
python 利用文件锁单例执行脚本的方法
2019/02/19 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
python 利用百度API识别图片文字(多线程版)
2020/12/14 Python
详解CSS3的perspective属性设置3D变换距离的方法
2016/05/23 HTML / CSS
关爱女孩行动实施方案
2014/03/13 职场文书
就业推荐表自我鉴定
2014/03/21 职场文书
作风转变年心得体会
2014/10/22 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
具结保证书范本
2015/05/11 职场文书
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery