python并发编程之进程1(守护进程,进程锁,进程队列)
进程的其他方法
P = Process(target=f,)
P.Pid 查看进程号 查看进程的名字p.name
P.is_alive() 返回一个true或者False
P.terminate() 给操作系统发送一个结束进程的信号
验证进程之间是空间隔离的
from multiprocessing import Processnum = 100def f1():global numnum = 3print(num) # 结果 3if __name__ == '__main__':p = Process(target=f1,)p.start()p.join()print(num) # 结果 100
守护进程
主进程的代码运行完毕设置为守护进程的子进程会随之结束
P.daemon = True
import time from multiprocessing import Processdef f1():time.sleep(3)print('xxxx')def f2():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()
import time from multiprocessing import Process,Manager,Lockdef f1(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 in p_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()
用队列实现消费者生产者模型 : 缓冲用,解耦用的,
import time from multiprocessing import Process,Queue,JoinableQueue#生产者 def producer(q):for i in range(10):time.sleep(0.2)s = '大包子%s号'%iprint(s+'新鲜出炉')q.put(s)q.join() #就等着task_done()信号的数量,和我put进去的数量相同时,才继续执行print('所有的任务都被处理了') #消费者 def consumer(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 = Truecon_p.start()pro_p.join()print('主进程结束')
转载于:https://www.cnblogs.com/fu-1111/p/10252253.html
python并发编程之进程1(守护进程,进程锁,进程队列)相关推荐
- Python并发编程:多线程-死锁现象与递归锁
一 死锁现象 所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待 ...
- python并发编程之semaphore(信号量)_浅谈Python并发编程之进程(守护进程、锁、信号量)...
前言:本博文是对Python并发编程之进程的知识延伸,主要讲解:守护进程.锁.信号量. 友情链接: 一.守护进程(daemon) 1.1 守护进程概念 首先我们都知道:正常情况下,主进程默认等待子进程 ...
- 《转载》Python并发编程之线程池/进程池--concurrent.futures模块
本文转载自 Python并发编程之线程池/进程池--concurrent.futures模块 一.关于concurrent.futures模块 Python标准库为我们提供了threading和mul ...
- Python并发编程之线程池/进程池
引言 Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码,但是当项目达到一定的规模,频繁创建/销毁进程或者线程是非常消耗资源的,这个时候我 ...
- Python并发编程之进程池
Python并发编程之进程池 一.进程池简介 二.进程池代码实例 一.进程池简介 可以用Pool类来创建进程池,可以把各种数据处理任务都提交给进程池.进程池提供的功能有点类似于列表解析和功能性编程操作 ...
- python 并发编程 多线程 目录
线程理论 python 并发编程 多线程 开启线程的两种方式 python 并发编程 多线程与多进程的区别 python 并发编程 多线程 Thread对象的其他属性或方法 python 并发编程 多 ...
- python 并发编程 多进程 目录
python multiprocessing模块 介绍 python 开启进程两种方法 python 并发编程 查看进程的id pid与父进程id ppid python 并发编程 多进程 Proce ...
- Python并发编程系列之多进程(multiprocessing)
1 引言 本篇博文主要对Python中并发编程中的多进程相关内容展开详细介绍,Python进程主要在multiprocessing模块中,本博文以multiprocessing种Process类为中心 ...
- Python并发编程系列之多线程
1 引言 上一篇博文详细总结了Python进程的用法,这一篇博文来所以说Python中线程的用法.实际上,程序的运行都是以线程为基本单位的,每一个进程中都至少有一个线程(主线程),线程又可以创建子线程 ...
- 深入浅出讲解Python并发编程
微信公众号:运维开发故事,作者:素心 Python并发编程 本文比较长,绕的也比较快,需要慢慢跟着敲代码并亲自运行一遍,并发编程本身来说就是编程里面最为抽象的概念,单纯的理论确实很枯燥,但这是基础,基 ...
最新文章
- linux 重新分区挂载,Linux:挂载磁盘分区,linux已挂载磁盘重新分区
- Windows2008 R2下,DCOM配置里的属性灰色不可用的解决方法
- Spring Boot项目整合Retrofit最佳实践,最优雅的HTTP客户端工具!
- Java笔记:包装类、toString()方法、单例类、比较(==和equals方法)
- python编程求导数_面向对象编程 —— java实现函数求导
- 养老不用愁,这种机器人可以让老年人自主地进行日常生活
- 入门 | egg.js 入门之egg-jwt
- 上汽通用五菱与菜鸟合作数字供应链 一期整车数字物流系统正式启用
- 计算整数的二进制中包含1的数量
- JS中innerHTML 和innerText和value的区别
- time datetime
- 【实习之T100开发】帆软报表笔记
- 使用FlashBoot3.2c 将 U 盘制作成 DOS 启动盘
- Ubuntu安装网络打印机
- zend新建php项目,Zend Studio使用教程:创建PHP文件的三种方式
- 【低功耗蓝牙】③ 蓝牙服务和特性的创建
- sql java web动态曲线图_使用Echarts实现动态曲线图表
- AI Earth ——开发者模式案例8:利用Landsat-8数据进行地表温度反演
- 【贪心算法】加勒比海盗船——最优装载问题
- win10 Microsoft Edge浏览器崩溃, Microsoft Edge 提示 网页无限次打开,直至电脑卡死
热门文章
- pythoncharm怎么保存_pycharm软件实现设置自动保存操作
- 修改GitHub Pages个人主页的域名
- 消息队列mq的原理及实现方法
- android通知栏屏蔽访客模式
- 易优cms响应式网站模板,EyouCMS网络科技公司网站模板
- css定义变量(定义:--aa;使用:var(--aa)、calc()计算样式函数
- F28335 ePWM模块简介——TMS320F28335学习笔记(四)
- 有道云笔记客户端收起左侧目录边栏方法
- Scala入门_开发环境安装
- python 腾讯视频签到_腾讯视频签到函数/网页2次签到