多进程相关内容(IPC)
多进程相关内容
1.守护进程(daemon)
主进程创建守护进程: 1.守护进程会在主进程代码执行结束后就终止
2.守护进程内无法再开启子进程,否则抛出异常
注意:进程之间是相互独立的,主进程代码结束,守护进程随机终止
from multiprocessing import Processdef task():print('son is running')print('son is done')if __name__ == '__main__':p = Process(target = task)p.daemon = True #要在p.start()前设置,设置p为守护进程p.start()print('father process')
2.进程同步
由于多道技术要求物理层面进程之间内存相互隔离,即数据不能共享.但是我们能共享同一套文件系统,所以访问同一个文件或同一个打印终端是没有任何问题的.
由于创建进程的速度不一,导致在共享文件就会产生数据错乱或打印错乱,我们引入了lock的概念,加锁:将并发变成串行,牺牲了运行效率,但避免了对硬件资源的竞争和保证了数据安全.
1.加锁
#模拟抢票
#json中存放字典的key格式必须以双引号注明
from multiprocessing import Process,Lock
import json#查询余票信息
def search():with open('db.json') as f:data = json.load(f)print('剩余票数:',data['count'])#购买
def buy():#由于网络延时,需重新获取余票信息with open('db.json') as f:data = json.load(f)if data['count']>0:data['count'] -= 1with open('db.json','wt') as fw:json.dump(data,fw)print('抢票成功')def task(mutex):search()mutex.acquire() #加锁buy()mutex.release() #解锁if __name__ == '__main__':mutex = Lock() #创建锁for i in range(5):p = Process(target=task,args=(mutex,))p.start()#加锁:保证多个进程修改同一块数据,同一时间只能有一个任务可以进行修改即串行的修改
#适用于: 1.共享数据较大,效率低
# 2.需要人为加锁
3.基于multiprocessing模块的IPC通信机制(推荐使用)
IPC:interface_process_communication(进程间通信),multiprocessing模块支持两种形式:队列和管道,这两种方式都是用来.
manager的使用
from multiprocessing import Process,Manager,Lockdef task(data,lock):lock.acquire()num = data[0]data[0] = num - 1lock.release()print('son is done')if __name__ == '__main__':ls = [100]m = Manager() #创建管理器syncls = m.list(ls) #同步列表lock = Lock()ps = []for i in range(10):p = Process(target=task,args=(syncls,lock))p.start()ps.append(p)for p in ps:p.join()print(ls) #100print(syncls) #90
队列和管道都是将数据存放于内存中的(即在运行时在内存中开辟一块共同存放数据的区域)
#队列原则:先进先出
from multiprocessing import Queueq = Queue(5) #创建队列中,同时只能存在最多元素maxsize=5
q.put(1) #放入元素
q.put(1,block=True,timeout=1) #block阻塞,默认为true,timeout延时(当队列为空时,在该时间内放入元素print(q.get(1) ) #取出队列元素#栈,函数调用,原则:后进先出
def a():b()def b():c()def c():print('c')raise Exceptiona()
转载于:https://www.cnblogs.com/bruce123/p/11184402.html
多进程相关内容(IPC)相关推荐
- android 内核内存管理,Android内核相关内容总结
要想充分掌握Android这一操作系统的应用,首先需要我们从Android内核的相关内容开始了解.在这里就为大家详细介绍一下相关的知识. Android操作系统是由谷歌推出的一款基于Linux平台开源 ...
- iOS 发布APP关于IDFA的相关内容
您的 App 正在使用广告标识符 (IDFA).您必须先提供关于 IDFA 的使用信息或将其从 App 中移除,然后再上传您的二进制文件. 如果出现下边这两张图,你就会感到蛋蛋的忧伤 还有这个 怎么解 ...
- golang实践LSM相关内容
LSM LSM(log-structured merge-tree)是一种分层,有序,面向磁盘的数据结构,其核心思想是充分了利用了,磁盘批量的顺序写要远比随机写性能高出很多,在计算机科学中,日志结构的 ...
- Assembly--及相关内容
Assembly--及相关内容 0.2672019.06.04 09:29:26字数 448阅读 88 De novo genome assembly Hybrid error correction ...
- Android开发环境——Eclipse ADT相关内容汇总
Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关 ...
- 基于KNN的相关内容推荐
如果做网站的内容运营,相关内容推荐可以帮助用户更快地寻找和发现感兴趣的信息,从而提升网站内容浏览的流畅性,进而提升网站的价值转化.相关内容 推荐最常见的两块就是"关联推荐"和&qu ...
- 【SeeMusic】创建 SeeMusic 工程并编辑相关内容 ( 创建工程 | 导入 MIDI 文件 | 导入音频 | 导入视频 )
SeeMusic 系列文章目录 [SeeMusic]下载安装并注册 SeeMusic 软件 [SeeMusic]创建 SeeMusic 工程并编辑相关内容 ( 创建工程 | 导入 MIDI 文件 | ...
- Android开发环境——模拟器AVD相关内容汇总
Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关内 ...
- DCMTK:OFpath和相关内容的测试程序
DCMTK:OFpath和相关内容的测试程序 OFpath和相关内容的测试程序 OFpath和相关内容的测试程序 #include "dcmtk/config/osconfig.h" ...
最新文章
- IDEA IntelliJ 如何设置web项目的热部署
- iPhone 应用开发:音频播放
- 字符串子串去重之后的个数
- 线上比赛中关于视觉AI组与信标组补充说明
- 虚拟化方案应用场景及优劣
- nedc和epa续航里程什么意思_景区电动观光车的续航里程为什么会逐渐变短?
- oracle rac 节点启动,Oracle 10g RAC 节点自动重启故障处理
- 健身小管家--android app源码
- myeclipse启动报JVM terminated. Exit code=1
- DirectX SDK 安装时出现错误 [Error Code:S1023] 的解决方案
- 软件破解技术之API替换
- 车架号校验 php代码,VIN车辆识别代码查询(精准版)
- python测试开发面试题带答案整理
- 简单使用Easy Touch5摇杆控制物体移动
- 支教笔记 我在泸定的那十天
- Intel SGX Explained
- 安装Kdevelop--我的过程
- 前端搜索关键字突出展示
- 图片合成视频 linux,ffmpeg安装在Linux下,并将图片合成视频
- 中国·希腊国家馆落户上海自贸区
热门文章
- js定义全局变量 vue页面_vue.js中如何定义全局变量?
- linux安装telnet客户端_Redis 6.0 的客户端缓存是怎么肥事?一文带你了解!
- 怎样有效的学会php,十天学会PHP - 序2,有效的学习方法 (20180822-1)
- html图片垂直边距,html – 为什么水平边距不会像垂直边距那样崩溃?
- java 文件大小,如何在Java中获取文件大小
- python魔术方法大全_python中魔术方法和属性汇总
- 虚拟机下载和使用说明
- Centos7 网络配置 设置静态Ip
- php redis 队列抢红包_redis 队列操作的例子(php)
- 智能财务师 (544) -(喀麦隆)_智能财务管理师项目组到南京理工大学调研“智能会计”专业学科建设...