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程序中操作文件之flush()方法的使用教程
May 24 Python
全面了解python字符串和字典
Jul 07 Python
Python tkinter的grid布局及Text动态显示方法
Oct 11 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
May 15 Python
阿里云ECS服务器部署django的方法
Aug 29 Python
Python基于Socket实现简单聊天室
Feb 17 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
Apr 14 Python
Python基于smtplib模块发送邮件代码实例
May 29 Python
python 基于PYMYSQL使用MYSQL数据库
Dec 24 Python
python用700行代码实现http客户端
Jan 14 Python
Python 循环读取数据内存不足的解决方案
May 25 Python
Python包argparse模块常用方法
Jun 04 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实现的随机IP函数【国内IP段】
2016/07/20 PHP
php利用gd库为图片添加水印
2016/11/09 PHP
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
Mootools 1.2教程 类(一)
2009/09/15 Javascript
Javascript var变量隐式声明方法
2009/10/19 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
用js实现控件的隐藏及style.visibility的使用
2013/06/14 Javascript
jQuery操作cookie方法实例教程
2014/11/25 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
2015/08/17 Javascript
JavaScript实现的伸展收缩型菜单代码
2015/10/14 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
jQuery数组处理函数整理
2016/08/03 Javascript
JS实现改变HTML上文字颜色和内容的方法
2016/12/30 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
js实现点击图片在屏幕中间弹出放大效果
2019/09/11 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
2019/09/21 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
从Python的源码来解析Python下的freeblock
2015/05/11 Python
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
python for和else语句趣谈
2019/07/02 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
2020/01/10 Python
Python select及selectors模块概念用法详解
2020/06/22 Python
div或img图片高度随宽度自适应的方法
2020/02/06 HTML / CSS
计算机专业应届毕业生自荐信
2013/09/26 职场文书
本科毕业生的求职信范文
2013/11/20 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
四下基层实施方案
2014/03/28 职场文书
体育系毕业生求职自荐信
2014/04/16 职场文书
数学系毕业生求职信
2014/05/29 职场文书
2014年学雷锋活动总结
2014/06/26 职场文书
大学生读书笔记范文
2015/07/01 职场文书
清明节主题班会
2015/08/14 职场文书
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android