先说说线程

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

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

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

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

其实在线程中,也可以接受信号,利用这种机制,我们也可以用来实现线程同步。更多信息见 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. python爬取图片实例_Python简单爬取图片实例

    都知道Python的语法很简单易上手,也很适合拿来作爬虫等等,这里就简单讲解一下爬虫入门--简单地爬取下载网站图片.html 效果 就像这样自动爬取下载图片到本地:python 代码: 其实很简单,咱 ...

  2. python结构体_Python实现结构体代码实例

    Python实现结构体代码实例 这篇文章主要介绍了Python实现结构体代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 # python 使 ...

  3. python简单的小程序_Python简单小程序---名片简易系统

    Python简单小程序---名片简易系统 主程序功能代码 import cards_tools while True: cards_tools.show_meun() action = int(inp ...

  4. 学简单python好学吗_python好学吗语法简单吗举个例子

    pythonPython (发音:[ 'paiθ()n; (US) 'paiθn ]n.蟒蛇,巨蛇 ),是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的 ...

  5. 学简单python好学吗_python好学吗? 语法简单吗? 举个例子?

    2009-07-13 回答 pythonPython (发音:[ 'paiθ(ə)n; (US) 'paiθɔn ]n.蟒蛇,巨蛇 ),是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完 ...

  6. python简短语法_python 简单语法入门

    人生苦短,我用python python之所以比较容易入门就是它的语法相对来说比较简单 下面就以一个简单hello,world为例来简单说下python中语法 import os #导入系统模块 de ...

  7. python 12306登录_Python 实现12306登录功能实例代码

    下面一段代码给大家带来了python实现12306登录功能,具体代码如下所示: #!/usr/bin/env python import requests import urllib.parse im ...

  8. python time库_python中time库的实例使用方法

    python中time库的实例使用方法 time是python中处理时间的标准库 计算机时间的表达 提供获取系统时间并格式化输出功能 提供系统级精确计时功能,用于程序性能分析 用法:import ti ...

  9. 大学python和vb哪个简单-python和vb哪个简单

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

  10. python成绩统计_python统计考试成绩代码参考

    统计一个班级学生的考试成绩,首先需要录入学生及其考试成绩.选出最高分,平均分,分数由高到低进行排序.评出学霸和学渣! 我的代码如下: #!/usr/bin/env python #coding:utf ...

最新文章

  1. TP-GAN 让图像生成再获突破,根据单一侧脸生成正面逼真人脸
  2. Spring Boot 2.0选择HikariCP作为默认数据库连接池的五大理由
  3. 11kw星三角启动延时几秒_电机星三角降压启动原理图
  4. tomcat架构分析(容器类)【转】
  5. 【Docker】网络模式
  6. 会计记忆总结之一:总论
  7. POPUP_TO_CONFIRM_LOSS_OF_DATA
  8. java判断或_Java 条件判断
  9. 图片压缩工具optipng/jpegoptim安装
  10. 堡垒之夜一年内增1亿玩家、YouTube为支持AV1的8K电视提供8K内容、Elon Musk要过极简生活等...
  11. 计算机博士论文答谢,这篇博士论文《致谢》刷屏,句句扎心
  12. mysql怎么访问用户B_MySQL访问控制和用户管理
  13. 关于sqlite断电或者存储空间不足造成的数据文件损坏问题-转
  14. UVA12190 Electric Bill【二分搜索】
  15. [翻译] FeSpinner
  16. 2017国二c语言考试试卷,2017备考计算机二级C语言真题试卷
  17. 装备制造业的变革时代,SCM供应链管理系统如何赋能装备制造企业转型升级
  18. 项目管理办公室(PMO) 的不同定位
  19. OIF 4.0协议分析心得-1
  20. zigbee学习之串口通信

热门文章

  1. 了解人工智能与智能系统中的先驱人物
  2. 理想的工作永远不存在
  3. 移动脱机 Outlook 数据文件 (.ost)
  4. Linux下常用网络配置命令
  5. redis九大数据类型数据结构及底层源码
  6. 好程序员大数据技术分享:Zookeeper集群管理与选举...
  7. Maven具体解释之------maven版本号管理
  8. Unity IOC简单认知
  9. RN 0.26 引用方式中哪些属于React,哪些属于React Native
  10. arcgis for android 学习 - (5) 在地图指定位置添加“标记“,并尝试选中它