python并发编程多进程 互斥锁原理解析


Posted in Python onAugust 20, 2019

运行多进程 每个子进程的内存空间是互相隔离的 进程之间数据不能共享的

互斥锁

但是进程之间都是运行在一个操作系统上,进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,

是可以的,而共享带来的是竞争,竞争带来的结果就是错乱

#并发运行,效率高,但竞争同一打印终端,带来了打印错乱
from multiprocessing import Process
import time
def task(name):
  print("%s 1" % name)
  time.sleep(1)
  print("%s 2" % name)
  time.sleep(1)
  print("%s 3" % name)
if __name__ == '__main__':
  for i in range(3):
    p = Process(target=task, args=("子进程%s" % i,))
    p.start()
'''
子进程2 1
子进程0 1
子进程1 1
子进程2 2
子进程1 2
子进程0 2
子进程2 3
子进程1 3
子进程0 3
'''

如何控制,就是加锁处理。而互斥锁的意思就是互相排斥,如果把多个进程比喻为多个人,

互斥锁的工作原理就是多个人都要去争抢同一个资源:卫生间,一个人抢到卫生间后上一把锁,其他人都要等着,等到这个完成任务后释放锁,其他人才有可能有一个抢到......

所以互斥锁的原理,就是把并发改成串行,降低了效率,但保证了数据安全,不错乱

加了互斥锁就没有并发效果了 加上锁只有一个可以运行 互斥锁会把并发变成串行 效率变低了

解决:

导入模块 Lock

现在程序启动 所有进程首先会去抢锁 只有抢到锁的才能运行

等这个进程运行完了解锁后 再到其他进程继续抢锁

from multiprocessing import Process, Lock
import time
def task(name, mutex):
  # 加锁
  mutex.acquire()
  print("%s 1" % name)
  time.sleep(1)
  print("%s 2" % name)
  time.sleep(1)
  print("%s 3" % name)
  # 把锁拆了
  mutex.release()
if __name__ == '__main__':
  # 建一个对象实例
  mutex = Lock()
  for i in range(3):
    # 把锁传给子进程 让所有子进程用同一把锁
    p = Process(target=task, args=("子进程%s" % i, mutex))
    p.start()
'''
现在程序启动 所有进程首先会去抢锁 只有抢到锁的才能运行
等这个进程运行完了解锁后 再到其他进程继续抢锁
'''
'''
子进程0 1
子进程0 2
子进程0 3
子进程1 1
子进程1 2
子进程1 3
子进程2 1
子进程2 2
子进程2 3
'''

牺牲了效率,保证数据不错乱

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python脚本设置超时机制系统时间的方法
Feb 21 Python
python实现rsa加密实例详解
Jul 19 Python
python数据结构之链表详解
Sep 12 Python
Python矩阵常见运算操作实例总结
Sep 29 Python
快速查询Python文档方法分享
Dec 27 Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 Python
使用python存储网页上的图片实例
May 22 Python
flask中的wtforms使用方法
Jul 21 Python
Python @property使用方法解析
Sep 17 Python
利用jupyter网页版本进行python函数查询方式
Apr 14 Python
关于tensorflow softmax函数用法解析
Jun 30 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 Python
django 配置阿里云OSS存储media文件的例子
Aug 20 #Python
python数据类型之间怎么转换技巧分享
Aug 20 #Python
python并发编程多进程之守护进程原理解析
Aug 20 #Python
python控制台实现tab补全和清屏的例子
Aug 20 #Python
关于python字符串方法分类详解
Aug 20 #Python
python+tkinter实现学生管理系统
Aug 20 #Python
Python对列表的操作知识点详解
Aug 20 #Python
You might like
php实现的zip文件内容比较类
2014/09/24 PHP
浅谈php的优缺点
2015/07/14 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
php简单处理XML数据的方法示例
2017/05/19 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
AngularJS 模型详细介绍及实例代码
2016/07/27 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
页面间固定参数,通过cookie传值的实现方法
2017/05/31 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
express框架下使用session的方法
2019/07/31 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
Python解释执行原理分析
2014/08/22 Python
python 写的一个爬虫程序源码
2016/02/28 Python
浅谈python迭代器
2017/11/08 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
python将视频转换为全字符视频
2019/04/26 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
2019/11/29 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
HTML5响应式(自适应)网页设计的实现
2017/11/17 HTML / CSS
MANGO官方网站:西班牙芒果服装品牌
2017/01/15 全球购物
TripAdvisor台湾:全球最大旅游网站
2018/08/26 全球购物
豪华复古化妆:Besame Cosmetics
2019/09/06 全球购物
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
乌克兰设计师和品牌的服装:Love&Live
2020/04/14 全球购物
一些.net面试题
2014/10/06 面试题
总经理助理的职责
2014/03/14 职场文书
羽毛球社团活动总结
2014/06/27 职场文书
忠诚奉献演讲稿
2014/09/12 职场文书
专业见习报告范文
2014/11/03 职场文书
《检阅》教学反思
2016/02/22 职场文书
Python通过loop.run_in_executor执行同步代码 同步变为异步
2022/04/11 Python