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中执行shell命令的几个方法小结
Sep 18 Python
python根据出生年份简单计算生肖的方法
Mar 27 Python
python实现数独算法实例
Jun 09 Python
python编写朴素贝叶斯用于文本分类
Dec 21 Python
pandas的唯一值、值计数以及成员资格的示例
Jul 25 Python
python使用tornado实现简单爬虫
Jul 28 Python
python进行TCP端口扫描的实现
Dec 21 Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
python Dijkstra算法实现最短路径问题的方法
Sep 19 Python
Django REST 异常处理详解
Jul 15 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
Dec 03 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中显示格式化的用户输入
2006/10/09 PHP
PHP数组内存耗用太多问题的解决方法
2010/04/05 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
php实现微信发红包功能
2018/07/13 PHP
Ajax+PHP实现的删除数据功能示例
2019/02/12 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片
2015/09/06 Javascript
js实现仿微博滚动显示信息的效果
2015/12/21 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
js判断是否为空和typeof的用法(详解)
2016/10/07 Javascript
ionic grid(栅格)九宫格制作详解
2018/06/30 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
2020/06/16 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
js实现简单选项卡制作
2020/08/05 Javascript
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
[05:08]第一届“网鱼杯”DOTA2比赛精彩集锦
2014/09/05 DOTA
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
python实用代码片段收集贴
2015/06/03 Python
Python爬虫学习之获取指定网页源码
2019/07/30 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
Python排序函数的使用方法详解
2020/12/11 Python
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
质检员的岗位职责
2013/11/15 职场文书
财务科科长岗位职责
2014/03/10 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
小学老师对学生的评语
2014/12/29 职场文书
离婚协议书样本
2015/01/26 职场文书
荆州古城导游词
2015/02/06 职场文书
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript
python多线程方法详解
2022/01/18 Python