python守护进程去中断子进程_04 Python并发编程(守护进程,进程锁,进程队列)
进程的其他方法
P = Process(target=f,)
P.Pid 查看进程号 查看进程的名字p.name
P.is_alive() 返回一个true或者False
P.terminate() 给操作系统发送一个结束进程的信号
验证进程之间是空间隔离的
from multiprocessing importProcess
num= 100
deff1():globalnum
num= 3
print(num) #结果 3
if __name__ == '__main__':
p= Process(target=f1,)
p.start()
p.join()print(num) #结果 100
守护进程
主进程的代码运行完毕设置为守护进程的子进程会随之结束
P.daemon = True
importtimefrom multiprocessing importProcessdeff1():
time.sleep(3)print('xxxx')deff2():
time.sleep(5)print('普通子进程的代码')if __name__ == '__main__':
p= Process(target=f1,)
p.daemon=True
p.start()
p2= Process(target=f2,)
p2.start()print('主进程结束') #守护进程会跟跟着父进程的代码运行结束,就结束
进程锁
数据共享 manager
多进程操作共享数据(文件内容)的时候,会造成数据不安全的问题
保证数据安全,但是牺牲了效率,加锁的这段代码大家变成了(同步)串行执行的状态,又叫同步锁\互斥锁
两种锁的方式
l = Lock()
1).with l:
锁中内容
2).
l.acquire()
锁中内容
l.release()
importtimefrom multiprocessing importProcess,Manager,Lockdeff1(m_d,l2):
with l2:#l2.acquire()
tmp = m_d['num']
tmp-= 1time.sleep(0.1)
m_d['num'] =tmp#l2.release()
if __name__ == '__main__':
m=Manager()
l2=Lock()
m_d= m.dict({'num':100})
p_list=[]for i in range(10):
p= Process(target=f1,args=(m_d,l2))
p.start()
p_list.append(p)
[pp.join()for pp inp_list]print(m_d['num'])
队列
Queue()
Q = Queue(10)
Q.put() 放数据
Q.get() 取数据
Q.qsize() 返回的是当前队列中内容的长度
Q.put_nowait() 不等待,但是报错
Q.get_nowait() 不等待,也是报错
Q.full() q.empty()
用队列实现消费者生产者模型 : 缓冲用,解耦用的,
defproducer(q):for i in range(10):
time.sleep(0.2)
s= '大包子%s号'%iprint(s+'新鲜出炉')
q.put(s)
q.join()#就等着task_done()信号的数量,和我put进去的数量相同时,才继续执行
print('所有的任务都被处理了')#消费者
defconsumer(q):while 1:
time.sleep(0.5)
baozi=q.get()print(baozi+'被吃了')
q.task_done()#给队列发送一个取出的这个任务已经处理完毕的信号
if __name__ == '__main__':#q = Queue(30)
q = JoinableQueue(30) #同样是一个长度为30的队列
pro_p= Process(target=producer,args=(q,))
con_p= Process(target=consumer,args=(q,))
pro_p.start()
con_p.daemon=True
con_p.start()
pro_p.join()print('主进程结束')
python守护进程去中断子进程_04 Python并发编程(守护进程,进程锁,进程队列)相关推荐
- 学习笔记(18):Python网络编程并发编程-守护进程
立即学习:https://edu.csdn.net/course/play/24458/296429?utm_source=blogtoedu 守护进程(了解) 1.概念:守护进程是主进程在创建子进程 ...
- 学习笔记(28):Python网络编程并发编程-死锁与递归锁
立即学习:https://edu.csdn.net/course/play/24458/296445?utm_source=blogtoedu 1.死锁(Lock()的局限性) 知识点:Lock()只 ...
- python多线程执行其他模块的文件_python并发编程--进程线程--其他模块-从菜鸟到老鸟(三)...
concurrent模块 1.concurrent模块的介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 Proc ...
- python僵尸进程和孤儿进程_Python Web学习笔记之并发编程的孤儿进程与僵尸进程...
1.前言 之前在看<unix环境高级编程>第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊.今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上 ...
- python 进程池 等待数量_【2020Python修炼记】python并发编程(六)补充—进程池和线程池...
1. 2. 为啥要有 进程池和线程池 进程池来控制进程数目,比如httpd的进程模式,规定最小进程数和最大进程数 3.创建进程池的类pool 如果指定numprocess为3,则进程池会从无到有创建三 ...
- Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁、信号量、事件、队列、生产者消费者模型...
一.进程锁(同步锁/互斥锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 例 ...
- 并发编程概念、程序线程进程、线程同步、互斥量、读写锁、协程并发
多线程: 多线程就是同时执行多个应用程序,需要硬件的支持 同时执行:不是某个时间段同时,cpu切换的比较快,所有用户会感觉是在同时运行 并发与并行: 并行(parallel):指在同一时刻,有多条指令 ...
- 【Java并发编程 四】Java的进程与线程
什么是进程?进程是程序的⼀次执⾏过程,是系统运⾏程序的基本单位,因此进程是动态的.系统运行和关闭⼀个程序即是⼀个进程从创建,运⾏到消亡的过程.在 Java 中,当我们启动 main 函数时其实就是启动 ...
- python底层网络交互模块_网络和并发编程(面试题)
1,python的底层网络交互模块有哪些? 答案:socket, urllib,urllib3 , requests, grab, pycurl 2,简述OSI七层模型以及列举各层协议 应用层:HTT ...
最新文章
- c++回调函数 callback
- 类库、通用变量、is和as、委托
- 【转】轻松记住大端小端的含义(附对大端和小端的解释)
- opencv 访问图像的像素方法和算法用时的计算
- Multisim10的4013BD_5V测试电路
- 博弈论(四)——#10246. 「一本通 6.7 练习 3」取石子
- docker curl: (56) Recv failure: Connection reset by peer问题解决方法
- STM32读写RAM
- 解决scalac Error: bad option -make:transitive
- 钽电容和铝电解电容的区别
- 音视频基础知识---音频编码格式
- python3 币种汇率计算
- Chainer Chemistry | 用于化学和生物学的深度学习库
- 小姐姐拯救计划之我的NAS有ipv6域名之蛇皮操作
- 基于MATLAB2020b的J. R.S. THOM的水强制循环沸腾压降预测模型压降倍乘系数计算器
- 重置Win10系统后微软应用商店Microsoft Store的恢复方法
- 【算法S5-贪心方法】
- 裸辞2个月找不到工作,我慌了
- 【flutter布局】如何在动态宽高的容器下,使子组件自动占满宽高
- 鱼c工作室python-鱼C工作室Python作业