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实现的解析crontab配置文件代码
Jun 30 Python
python BeautifulSoup设置页面编码的方法
Apr 03 Python
在Django的URLconf中进行函数导入的方法
Jul 18 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
May 15 Python
Python SQL查询并生成json文件操作示例
Aug 17 Python
解决python3 Pycharm上连接数据库时报错的问题
Dec 03 Python
浅谈PYTHON 关于文件的操作
Mar 19 Python
Python3使用TCP编写一个简易的文件下载器功能
May 08 Python
Python中常用的os操作汇总
Nov 05 Python
python 模块导入问题汇总
Feb 01 Python
Python作用域和名称空间的详细介绍
Apr 13 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
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
PHP面向接口编程 耦合设计模式 简单范例
2011/03/23 PHP
PHP与服务器文件系统的简单交互
2016/10/21 PHP
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
检测jQuery.js是否已加载的判断代码
2011/05/20 Javascript
jQuery之排序组件的深入解析
2013/06/19 Javascript
java与javascript之间json格式数据互转介绍
2013/10/29 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
Vue 中的compile操作方法
2018/02/26 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
详解解决小程序中webview页面多层history返回问题
2019/08/20 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
2020/06/16 Javascript
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
在Django中实现添加user到group并查看
2019/11/18 Python
opencv中图像叠加/图像融合/按位操作的实现
2020/04/01 Python
Python通过队列来实现进程间通信的示例
2020/10/14 Python
Python jieba结巴分词原理及用法解析
2020/11/05 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
生产部厂长助理职位说明书
2014/03/03 职场文书
合伙协议书
2014/04/23 职场文书
项目建议书模板
2014/05/12 职场文书
社团个人总结范文
2015/03/05 职场文书
2016年记者节感言
2015/12/08 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS