多进程相关内容

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)相关推荐

  1. android 内核内存管理,Android内核相关内容总结

    要想充分掌握Android这一操作系统的应用,首先需要我们从Android内核的相关内容开始了解.在这里就为大家详细介绍一下相关的知识. Android操作系统是由谷歌推出的一款基于Linux平台开源 ...

  2. iOS 发布APP关于IDFA的相关内容

    您的 App 正在使用广告标识符 (IDFA).您必须先提供关于 IDFA 的使用信息或将其从 App 中移除,然后再上传您的二进制文件. 如果出现下边这两张图,你就会感到蛋蛋的忧伤 还有这个 怎么解 ...

  3. golang实践LSM相关内容

    LSM LSM(log-structured merge-tree)是一种分层,有序,面向磁盘的数据结构,其核心思想是充分了利用了,磁盘批量的顺序写要远比随机写性能高出很多,在计算机科学中,日志结构的 ...

  4. Assembly--及相关内容

    Assembly--及相关内容 0.2672019.06.04 09:29:26字数 448阅读 88 De novo genome assembly Hybrid error correction ...

  5. Android开发环境——Eclipse ADT相关内容汇总

     Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关 ...

  6. 基于KNN的相关内容推荐

    如果做网站的内容运营,相关内容推荐可以帮助用户更快地寻找和发现感兴趣的信息,从而提升网站内容浏览的流畅性,进而提升网站的价值转化.相关内容 推荐最常见的两块就是"关联推荐"和&qu ...

  7. 【SeeMusic】创建 SeeMusic 工程并编辑相关内容 ( 创建工程 | 导入 MIDI 文件 | 导入音频 | 导入视频 )

    SeeMusic 系列文章目录 [SeeMusic]下载安装并注册 SeeMusic 软件 [SeeMusic]创建 SeeMusic 工程并编辑相关内容 ( 创建工程 | 导入 MIDI 文件 | ...

  8. Android开发环境——模拟器AVD相关内容汇总

    Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关内 ...

  9. DCMTK:OFpath和相关内容的测试程序

    DCMTK:OFpath和相关内容的测试程序 OFpath和相关内容的测试程序 OFpath和相关内容的测试程序 #include "dcmtk/config/osconfig.h" ...

最新文章

  1. IDEA IntelliJ 如何设置web项目的热部署
  2. iPhone 应用开发:音频播放
  3. 字符串子串去重之后的个数
  4. 线上比赛中关于视觉AI组与信标组补充说明
  5. 虚拟化方案应用场景及优劣
  6. nedc和epa续航里程什么意思_景区电动观光车的续航里程为什么会逐渐变短?
  7. oracle rac 节点启动,Oracle 10g RAC 节点自动重启故障处理
  8. 健身小管家--android app源码
  9. myeclipse启动报JVM terminated. Exit code=1
  10. DirectX SDK 安装时出现错误 [Error Code:S1023] 的解决方案
  11. 软件破解技术之API替换
  12. 车架号校验 php代码,VIN车辆识别代码查询(精准版)
  13. python测试开发面试题带答案整理
  14. 简单使用Easy Touch5摇杆控制物体移动
  15. 支教笔记 我在泸定的那十天
  16. Intel SGX Explained
  17. 安装Kdevelop--我的过程
  18. 前端搜索关键字突出展示
  19. 图片合成视频 linux,ffmpeg安装在Linux下,并将图片合成视频
  20. 中国·希腊国家馆落户上海自贸区

热门文章

  1. js定义全局变量 vue页面_vue.js中如何定义全局变量?
  2. linux安装telnet客户端_Redis 6.0 的客户端缓存是怎么肥事?一文带你了解!
  3. 怎样有效的学会php,十天学会PHP - 序2,有效的学习方法 (20180822-1)
  4. html图片垂直边距,html – 为什么水平边距不会像垂直边距那样崩溃?
  5. java 文件大小,如何在Java中获取文件大小
  6. python魔术方法大全_python中魔术方法和属性汇总
  7. 虚拟机下载和使用说明
  8. Centos7 网络配置 设置静态Ip
  9. php redis 队列抢红包_redis 队列操作的例子(php)
  10. 智能财务师 (544) -(喀麦隆)_智能财务管理师项目组到南京理工大学调研“智能会计”专业学科建设...