先说说线程

在多线程中,为了保证共享资源的正确性,我们常常会用到线程同步技术.

将一些敏感操作变成原子操作,保证同一时刻多个线程中只有一个线程在执行这个原子操作。

我最常用的是互斥锁,也称独占锁。其次还有读写锁,信号量,条件变量等。

除此之外,我们在进程间通信时会用到信号,向某一个进程发送信号,该进程中设置信号处理函数,然后当该进程收到信号时,执行某些操作。

其实在线程中,也可以接受信号,利用这种机制,我们也可以用来实现线程同步。更多信息见 http://www.zzvips.com/article/75502.html

再说说进程

进程里我们通过一些进程间通信方式,可以实现进程间的同步。

最近我遇到的一个情况是,某采集系统进程池中很多进程会向同一个日志文件中打印日志,如果通过进程间通信实现,比较麻烦。

还有一种办法,如果采用共享内存的方式,不同的进程分别将日志消息通过共享内存放入一个线程安全的队列中,再建立一个进程负责专门打印日志,这样也可以保证不被大乱,

保证日志的正确性,但代码量也很多阿。

还有一种办法,在共享内存中设置一个互斥锁,所有进程共享。

如果能像线程一样,有一个简单的互斥锁,用的时候只要加锁,就能实现进程间的互斥就好了。之前对文件加锁,也有些印象,于是我用它实现了一个进程间的互斥锁

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#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简单进程锁代码实例相关推荐

  1. mysql跨进程锁_python基于mysql实现的简单队列以及跨进程锁

    在我们做多进程应用开发的过程中,难免会遇到多个进程访问同一个资源(临界资源)的状况,必须通过加一个全局性的锁,来实现资源的同步访问(同一时间只能有一个进程访问资源). 举个例子: 假设我们用mysql ...

  2. python最简单的爬虫代码,python小实例一简单爬虫

    python新手求助 关于爬虫的简单例子 #coding=utf-8from bs4 import BeautifulSoupwith open('', 'r') as file: fcontent ...

  3. 独家 | 如何用简单的Python为数据科学家编写Web应用程序?(附代码链接)

    作者:拉胡尔·阿加瓦尔(Rahul Agarwal), Walmart 实验室的数据科学家 翻译:陈之炎 校对:闫晓雨 本文约4300字,建议阅读10分钟. 本文阐述如何使用StreamLit创建支持 ...

  4. python读取excel表格-python读写Excel表格的实例代码(简单实用)

    安装两个库:pip install xlrd.pip install xlwt 1.python读excel--xlrd 2.python写excel--xlwt 1.读excel数据,包括日期等数据 ...

  5. python和vb的代码可以通用吗-python和vb哪个简单

    Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言,为结构化的.模块化的.面向对象的.包含协助开发环境的事件驱动为机制的可视化程序设计语言.是一种可用于 ...

  6. python读文件代码-简单了解Python读取大文件代码实例

    这篇文章主要介绍了简单了解Python读取大文件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 通常对于大文件读取及处理,不可能直接加载到内 ...

  7. python数据库教程_Python连接mysql数据库及简单增删改查操作示例代码

    1.安装pymysql 进入cmd,输入 pip install pymysql: 2.数据库建表 在数据库中,建立一个简单的表,如图: 3.简单操作 3.1查询操作 #coding=utf-8 #连 ...

  8. python简单小游戏代码_一个简单的python小游戏---七彩同心圆

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 用pygame做一个简单的python小游戏-七彩同心圆 玩法:每次点击鼠标时,会以鼠标为圆心,不断 ...

  9. 一段简单的python代码_Python趣味打怪:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源...

    鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 人生苦短,编程苦手,不妨学起Python,感受一飞冲天的快乐. 不要害怕学习的过程枯燥无味,这里有程序员jackzhenguo打造的一份中文 ...

最新文章

  1. 最近做了一个搜索接口的优化,反复压测了四次,终于达到要求了
  2. 基于人工神经网络的不规则小天体引力场建模
  3. 开发日记-20190508 关键词 dagger Idea插件
  4. java怎么画词云_Matplotlib学习---用wordcloud画词云(Word Cloud)
  5. php 安装rabbitmq拓展_安装 php-rabbit: RabbitMQ 的 PHP 扩展
  6. border-image图片边框
  7. Apollo进阶课程 ⑮丨Apollo自动定位技术详解—百度无人车定位技术
  8. php注册树模式,php设计模式-注册树模式
  9. oracle执行plus时跳出,oracle – 从shell脚本运行sqlplus时管理错误处理
  10. linux 安装_Linux安装JDK
  11. jQuery javaScript js 判断浏览器的类型、版本的方法
  12. 《Web漏洞防护》读书笔记——第3章,其他注入防护
  13. 【代码笔记】Web-JavaScript-JavaScript 运算符
  14. 商业计划书范文3000_项目融资商业计划书模板范文PPT
  15. 什么是物联网(IoT)?
  16. 用群晖服务器搭建网站
  17. 高德地图标识大全_连地震都查得一清二楚!高德地图新功能体验
  18. flink设置checkpoint部署后一直重启,出现检查点无法写入的问题
  19. 利用媒体云实现差异化
  20. Nvidia Deepstream极致细节:3. Deepstream Python RTSP视频输出显示

热门文章

  1. 一、CI框架(CodeIgniter)简介
  2. thikPHP框架部署
  3. 2017年BackBox5和Ubuntu16.04.1国内更新源
  4. [工具] Snipaste
  5. 远程电脑备份与还原数据库
  6. (转载)C语言中strlen()返回值类型为无符号数
  7. [导入]Nutch 简介 [官方]
  8. CCF201612-1 中间数(100分)【序列处理+排序】
  9. UVA10912 Simple Minded Hashing【DP】
  10. Bailian2880 句中最长的单词【字符串】