9.5 守护进程

主进程创建守护进程

其一:守护进程会在主进程代码执行结束后就立即终止

其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children

注意:进程之间是互相独立的,主进程代码运行结束,守护进程随即终止

p.daemon:默认值为False,如果设为True,代表p为后台运行的守护进程,当p的父进程终止时,p也随之终止,并且设定为True后,p不能创建自己的新进程,必须在p.start()之前设置

from multiprocessing import Process

def task(name):

print('%s is running' % name)

time.sleep(3)

if __name__ == '__main__':

obj = Process(target=task, args=('egon',))

obj.daemon=True #设置obj为守护进程,并且父进程代码执行结束,obj即终止运行

obj.start() # 发送信号给操作系统

print('主')

9.6 互斥锁

互斥锁用来将并发编程串行,牺牲了效率而保证了数据安全

强调:必须是lock.acquire()一次,然后 lock.release()释放一次,才能继续lock.acquire(),不能连续的lock.acquire()

互斥锁和 join的区别:

二者的原理都是一样,都是将并发变成串行,从而保证有序

区别一:join是按照人为指定的顺序执行,而互斥锁是进程平等地竞争,谁先抢到谁执行,一个人拿到锁,其余人都等待

from multiprocessing import Process,Lock

import random

mutex=Lock()

def task1(lock):

lock.acquire()

print('task1:名字是egon')

print('task1:性别是male')

lock.release()

def task2(lock):

lock.acquire()

print('task2:名字是alex')

print('task2:性别是male')

lock.release()

def task3(lock):

lock.acquire()

print('task3:名字是lxx')

print('task3:性别是female')

lock.release()

if __name__ == '__main__':

p1=Process(target=task1,args=(mutex,))

p2=Process(target=task2,args=(mutex,))

p3=Process(target=task3,args=(mutex,))

p1.start()# p1.start()

p2.start()# p1.join()

p3.start()# p2.start()

# p2.join()

# p3.start()

# p3.join()

9.61 模拟抢票

互斥锁和 join的区别二:

互斥锁可以让一部分代码(修改共享数据的代码)串行,而join只能将代码整体串行

import json

import time

import random

import os

from multiprocessing import Process,Lock

mutex=Lock()

def search():

time.sleep(random.randint(1,3))

with open('db.json','r',encoding='utf-8') as f:

dic=json.load(f)

print('%s 剩余票数:%s' %(os.getpid(),dic['count']))

def get():

with open('db.json','r',encoding='utf-8') as f:

dic=json.load(f)

if dic['count'] > 0:

dic['count']-=1

with open('db.json','w',encoding='utf-8') as f:

json.dump(dic,f)

print('%s 购票成功' %os.getpid())

def task(lock):

search()

lock.acquire()

get()

lock.release()

if __name__ == '__main__':

for i in range(10):

p=Process(target=task,args=(mutex,))

p.start()

# p.join()

9.7 IPC通信机制

进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的

进程之间通信必须找到一种介质,该介质必须满足: 1、是所有进程共享的 2、必须是内存空间 附加:帮我们自动处理好锁的问题

from multiprocessing import Process,Manager,Lock

import time

mutex=Lock()

def task(dic,lock):

lock.acquire()

temp=dic['num']

time.sleep(0.1)

dic['num']=temp-1

lock.release()

if __name__ == '__main__':

m=Manager()

dic=m.dict({'num':10})

l=[]

for i in range(10):

p=Process(target=task,args=(dic,mutex))

l.append(p)

p.start()

for p in l:

p.join()

print(dic) #{'num': 0}

9.71创建队列的类Queue

底层就是以管道和锁定的方式实现:

队列 (管道+锁) :1、共享的空间 2、是内存空间 3、自动帮我们处理好锁定问题

Queue([maxsize]):创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递。

maxsize是队列中允许最大项数,省略则无大小限制。

from multiprocessing import Queue

q=Queue(3) #maxsize=3

q.put('first')

q.put({'second':None})

q.put('三')

# q.put(4) #阻塞

print(q.get()) #first

print(q.get()) #{'second': None}

print(q.get()) #三

强调: 1、队列用来存成进程之间沟通的消息,数据量不应该过大 2、maxsize的值超过的内存限制就变得毫无意义

了解:block=True(默认值)、timeout

q=Queue(1)

q.put('first',block=False) #q.put方法用以插入数据到队列中

q.put('fourth',block=False/True)#queue.Full/一直等

q.put('first',block=True)

q.put('fourth',block=True,timeout=3)#等3秒后报错queue.Full

q.get(block=False)#q.get方法可以从队列读取并且删除一个元素

q.get(block=False)#queue.Empty

q.get(block=True)

q.get(block=True,timeout=2)#等2秒后报错queue.Empty

网络编程基础----并发编程 ---守护进程----同步锁 lock-----IPC机制----生产者消费者模型

1  守护进程: 主进程 创建 守护进程   辅助主进程的运行 设置进程的 daemon属性 p1.daemon=True 1 守护进程会在主进程代码执行结束后就终止: 2 守护进程内无法再开启子进程 ...

守护进程,互斥锁,IPC,队列,生产者与消费者模型

小知识点:在子进程中不能使用input输入! 一.守护进程 守护进程表示一个进程b 守护另一个进程a 当被守护的进程结束后,那么守护进程b也跟着结束了 应用场景:之所以开子进程,是为了帮助主进程完成某 ...

Java并发编程实战 03互斥锁 解决原子性问题

文章系列 Java并发编程实战 01并发编程的Bug源头 Java并发编程实战 02Java如何解决可见性和有序性问题 摘要 在上一篇文章02Java如何解决可见性和有序性问题当中,我们解决了可见性和 ...

4 并发编程-(进程)-守护进程&互斥锁

一.守护进程 主进程创建子进程,然后将该进程设置成守护自己的进程,守护进程就好比崇祯皇帝身边的老太监,崇祯皇帝已死老太监就跟着殉葬了. 关于守护进程需要强调两点: 其一:守护进程会在主进程代码执行结束 ...

python并发编程-进程理论-进程方法-守护进程-互斥锁-01

操作系统发展史(主要的几个阶段) 初始系统 1946年第一台计算机诞生,采用手工操作的方式(用穿孔卡片操作) 同一个房间同一时刻只能运行一个程序,效率极低(操作一两个小时,CPU一两秒可能就运算完了) ...

8.9 day30 并发编程 进程理论 进程方法 守护进程 互斥锁

多道技术 1.空间上的复用 多个程序共用一套计算机硬件 多道技术原理 2.时间上的复用 ​ 切换+保存状态 ​ 1.当一个程序遇到IO操作 操作系统会剥夺该程序的CPU执行权限( 提高了CPU的利用率 ...

Python 之并发编程之进程中(守护进程(daemon)、锁(Lock)、Semaphore(信号量))

五:守护进程 正常情况下,主进程默认等待子进程调用结束之后再结束守护进程在主进程所有代码执行完毕之后,自动终止kill -9 进程号 杀死进程.守护进程的语法:进程对象.daemon = True设置 ...

Python并发编程(守护进程,进程锁,进程队列)

进程的其他方法 P = Process(target=f,) P.Pid 查看进程号  查看进程的名字p.name P.is_alive()  返回一个true或者False P.terminate( ...

Python并发编程-守护进程

守护进程 子进程转换为守护进程 主进程的代码结束,子进程的代码也应该接收, 这个事情有守护进程来做 守护进程会随着主进程的代码执行完毕而结束, 而不是随着主进程的接收而结束(子进程不一定结束) fro ...

python之并发编程(线程\进程\协程)

一.进程和线程 1.进程 假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I/O操作),而此时CPU只能静静地等待任务A读取完数据才能继续执行,这样就白白浪费了CPU资源.是 ...

随机推荐

替换url中某个参数的值或是添加某个参数的方法(js 分页上下页可以使用)

function changeUrl(base, find, value) { var offset = base.indexOf(find); var index; var rr = ''; if( ...

windows8.1下android开发环境搭建(Eclipse+Android sdk+ADT+Genymotion)

一.基本jdk.eclipse环境 二.android sdk 1.下载安装:https://developer.android.com/sdk/installing/index.html?pkg=t ...

使用python做科学计算

这里总结一个guide,主要针对刚开始做数据挖掘和数据分析的同学 说道统计分析工具你一定想到像excel,spss,sas,matlab以及R语言.R语言是这里面比较火的,它的强项是强大的绘图功能以及 ...

Chrome developer tool:本人钟爱的 console、Network 功能简谈

在最开始时,本人调试查看网页,一直用的是 firefox 的 firebug 插件,并没有使用 chrome 的 developer tool .只不过,在日常生活使用过程中,一直使用的是 chrom ...

值类型与引用类型(特殊的string) Typeof和GetType() 静态和非静态使用 参数传递 相关知识

学习大神博客链接: http://www.cnblogs.com/zhili/category/421637.html 一 值类型与引用类型 需要注意的string 是特殊类型的引用类型. 使用方法: ...

实现android activity之间的跳转

android程序一般不会只有一个activity,会碰到activity之间的跳转.以下是使用Intent做应用程序内部的activity做跳转.比如,应用程序第一个activity是: 点击“下一 ...

Git更新远程仓库代码到本地(转)

参考链接:https://blog.csdn.net/chailyuan/article/details/53292031 在下载一个较大的github项目以后,当该项目代码更新以后,我们想将更新的内 ...

【CF886D】Restoration of string 乱搞

[CF886D]Restoration of string 题意:对于给定的一个母串,定义一个字符串是出现频率最多的,当且仅当它在母串中出现的次数最多(可以有多个出现次数最多的,出现的位置可以重叠). ...

css 去除移动端手指按下瞬间的类hover色块

在指定的a或者button  设置此CSS -webkit-tap-highlight-color:transparent;

python并发编程之semaphore(信号量)_python 之 并发编程(守护进程、互斥锁、IPC通信机制)...相关推荐

  1. python并发编程之semaphore(信号量)_Python 并发编程系列之多线程

    Python 并发编程系列之多线程 2 创建线程 2.1 函数的方式创建线程 2.2 类的方式创建线程 3 Thread 类的常用属性和方法 3.1 守护线程: Deamon 3.2 join()方法 ...

  2. python并发编程之semaphore(信号量)_python并发编程之多线程

    多线程 线程 1.什么是线程 进程是一个执行空间 , 线程就是其中真正工作的单位 , 每一个进程至少有一个线程(如果我们把操作系统比喻为一个工厂 , 进程就是车间 , 线程就是流水线) 进程包含了运行 ...

  3. python并发编程之semaphore(信号量)_python并发编程之Semaphore(信号量)

    threading模块里的Semaphore类实现了信号量对象,可用于控制获取资源的线程数量.所具有的acquire()和release()方法,可以用with语句的上下文管理器.当进入时,将调用ac ...

  4. python并发编程之semaphore(信号量)_浅谈Python并发编程之进程(守护进程、锁、信号量)...

    前言:本博文是对Python并发编程之进程的知识延伸,主要讲解:守护进程.锁.信号量. 友情链接: 一.守护进程(daemon) 1.1 守护进程概念 首先我们都知道:正常情况下,主进程默认等待子进程 ...

  5. Java并发编程之Semaphore信号量

    Semaphore: Semaphore基于AQS的共享模式实现,主要用于在总体许可(permits)一定的情况下,限制线程的并发访问,可用于实现:服务限流. 获取permits的过程: 如上图所示, ...

  6. 4月25日 python学习总结 互斥锁 IPC通信 和 生产者消费者模型

    一.守护进程 import random import time from multiprocessing import Processdef task():print('name: egon')ti ...

  7. 并发编程之 Semaphore 源码分析

    前言 并发 JUC 包提供了很多工具类,比如之前说的 CountDownLatch,CyclicBarrier ,今天说说这个 Semaphore--信号量,关于他的使用请查看往期文章并发编程之 线程 ...

  8. java并发编程之Semaphore

    1.Semaphore主要方法 Semaphore(int permits):构造方法,创建具有给定许可数的计数信号量并设置为非公平信号量. Semaphore(int permits,boolean ...

  9. 并发编程之LockSupport的 park 方法及线程中断响应

    系列文章目录 Java并发编程技术知识点梳理(第一篇)操作系统底层工作的整体认识 Java并发编程技术知识点梳理(第二篇)并发编程之JMM&volatile详解 Java并发编程技术知识点梳理 ...

最新文章

  1. 序列元素IT面试题——判断合法出栈序列
  2. 使用自定义annotation接口进行aspectj动态缓存
  3. matplotlib中文乱码问题_MacOS解决Matplotlib的中文乱码问题
  4. python pytest mark.parametrize
  5. “咕”了 73 天,何同学终于回归:最喜欢 3D 打印机,但不要买
  6. 关于scrollTop
  7. python importlib
  8. 关于Spring Cloud Netflix
  9. 用双十一的故事串起碎片的网络协议(中)
  10. 计算机网络基础知识点总结
  11. Android检测wifi信号强度,检测网络是否通畅
  12. bind服务12---分离解析
  13. SQL应用·:用SQL分析供应商营业额
  14. 【Matlab文件操作】打开、创建、更改和删除文件与文件夹以及获取文件信息
  15. 菜鸟之如何让项目跑起来(适合小白看,不是小白的不要进来看了,浪费时间)
  16. 最简单优雅修改jupyter自带主题字体大小颜色(不需要插件不需要第三方theme)
  17. 查看用户登陆历史记录
  18. android 4.4 x86 iso,安卓x86 4.4 iso下载
  19. Java基础学习之Servlet 运用学习
  20. 一起学习用Verilog在FPGA上实现CNN----(三)激活层设计

热门文章

  1. 关于微信公众号开发中扫码关注和关注之后继续扫码的不同点
  2. php微信支付分取消订单,PHP实现微信支付和退款
  3. Python3 根据m3u8下载视频,批量下载ts文件并且合并
  4. 怎么做新闻软文推广?故事性新闻稿写作技巧_云媒易
  5. 面试常见的功能测试考试题关于测试方法的
  6. sim的准确识别技术
  7. ArcGIS专题制图(一):制图中如何给图层增加阴影立体效果
  8. 12.14黄金白银实时行情分析,黄金原油解套操作策略
  9. SCI三区论文大修笔记(已录用)
  10. 微信 html自动加载js,微信小程序实现图片预加载组件