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运算π的值深入Python中科学计算的实现
Apr 17 Python
python实现用户登陆邮件通知的方法
Jul 09 Python
解决Python中字符串和数字拼接报错的方法
Oct 23 Python
python实现爬取图书封面
Jul 05 Python
详解Python3注释知识点
Feb 19 Python
python从入门到精通 windows安装python图文教程
May 18 Python
对python 树状嵌套结构的实现思路详解
Aug 09 Python
Python读取YAML文件过程详解
Dec 30 Python
python字符串,元组,列表,字典互转代码实例详解
Feb 14 Python
python模拟实现分发扑克牌
Apr 22 Python
Python代码需要缩进吗
Jul 01 Python
Python字典dict常用方法函数实例
Nov 09 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中的CMS的涵义
2007/03/11 PHP
php生成图形验证码几种方法小结
2013/08/15 PHP
PHP中iconv函数转码时截断字符问题的解决方法
2015/01/21 PHP
php短网址和数字之间相互转换的方法
2015/03/13 PHP
php统计数组元素个数的方法
2015/07/02 PHP
PHP实现一个多功能购物网站的案例
2017/09/13 PHP
php输出反斜杠的实例方法
2019/09/19 PHP
laravel-admin 实现给grid的列添加行数序号的方法
2019/10/08 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
JQuery 实现的页面滚动时浮动窗口控件
2009/07/10 Javascript
JavaScript 应用技巧集合[推荐]
2009/08/30 Javascript
document.onreadystatechange事件的用法分析
2009/10/17 Javascript
JavaScript通过RegExp实现客户端验证处理程序
2013/05/07 Javascript
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
jquery-mobile基础属性与用法详解
2016/11/23 Javascript
Javascript 实现放大镜效果实例详解
2016/12/03 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
JS实现简易留言板增删功能
2020/02/08 Javascript
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
2021/01/29 jQuery
Python深度优先算法生成迷宫
2018/01/22 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
Python + selenium自动化环境搭建的完整步骤
2018/05/19 Python
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
综治宣传月活动总结
2014/04/28 职场文书
超市食品安全承诺书
2015/04/29 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers