多进程,守护进程,锁
2019独角兽企业重金招聘Python工程师标准>>>
一:多进程
import os import time from multiprocessing import Process def func(args,args2): print(args,args2)#打印参数 time.sleep(3)print('子进程 :', os.getpid()) #查看子进程进程号 print('子进程的父进程 :', os.getppid())#查看子进程的父进程,多了一个p print(12345)if __name__ == '__main__': p = Process(target=func,args=('参数','参数2')) # 注册 # p是一个进程对象,还没有启动进程 p.start() # 开启了一个子进程 print('*'*10)print('父进程 :',os.getpid()) # 查看当前进程的进程号 print('父进程的父进程 :',os.getppid()) # 查看当前进程的父进程 # 进程的生命周期 # 主进程 # 子进程 # 开启了子进程的主进程 : # 主进程自己的代码如果长,等待自己的代码执行结束, # 子进程的执行时间长,主进程会在主进程代码执行完毕之后等待子进程执行完毕之后 主进程才结束
打印结果: 先打印主进程,然后打印子进程。主进程结束执行子进程。
**********
父进程 : 3832
父进程的父进程 : 2556
参数 参数2
子进程 : 5416
子进程的父进程 : 3832
12345
二:多进程的中的几个方法(多进程即可指子进程,父进程这两个进程,也可指多个实例化两个进程)
import time from multiprocessing import Processdef func(arg1,arg2): print('*'*arg1)time.sleep(5)print('*'*arg2)if __name__ == '__main__': p = Process(target=func,args=(10,20))p.start()print('hahahaha')# p.join() # 是感知一个子进程的结束,将异步的程序改为同步 print('====== : 运行完了')
这样就是正常打印,主进程执行完毕执行子进程
hahahaha
====== : 运行完了
**********
********************
如果加上join之后,是感知一个子进程的结束,将异步的程序改为同步。也就是等待子进程结束后主进程关闭
打印结果:
hahahaha
**********
********************
====== : 运行完了
如果子进程是一个while循环的死循环,那么主进程就一直不会关闭。
import os import time from multiprocessing import Processdef func(): while True: print('子进程开始')time.sleep(1)print('***我还在运行')if __name__ == '__main__': p = Process(target=func)p.daemon = True p.start()p.join()print('程序结束')
打印结果:
子进程开始
***我还在运行
子进程开始
***我还在运行
总是在子进程这里循环
小总结:
process小知识:
Process([group [, target [, name [, args [, kwargs]]]]]),由该类实例化得到的对象, 表示一个子进程中的任务(尚未启动)强调: 1. 需要使用关键字的方式来指定参数 2. args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号参数介绍: 1 group参数未使用,值始终为None 2 target表示调用对象,即子进程要执行的任务 3 args表示调用对象的位置参数元组,args=(1,2,'egon',) 4 kwargs表示调用对象的字典,kwargs={'name':'egon','age':18} 5 name为子进程的名称
进程常见关键字
1 p.start():启动进程,并调用该子进程中的p.run() 2 p.run():进程启动时运行的方法,正是它去调用target指定的函数,我们自定义类的类中一定要实现该方法 3 p.terminate():强制终止进程p,不会进行任何清理操作,如果p创建了子进程,该子进程就成了僵尸进程, 使用该方法需要特别小心这种情况。如果p还保存了一个锁那么也将不会被释放,进而导致死锁 4 p.is_alive():如果p仍然运行,返回True 5 p.join([timeout]):主线程等待p终止(强调:是主线程处于等的状态,而p是处于运行的状态)。 timeout是可选的超时时间,需要强调的是,p.join只能join住start开启的进程,而不能join住run开启的进程
开启多个子进程
import os import time from multiprocessing import Processdef func(filename,content): with open(filename,'w') as f: f.write(content*10*'*')if __name__ == '__main__': p_lst = []for i in range(10): p = Process(target=func,args=('info%s'%i,i))p_lst.append(p)p.start()for p in p_lst:p.join() # 之前的所有进程必须在这里都执行完才能执行下面的代码 print([i for i in os.walk(r'F:\python10期\day37\day37')])# 同步 0.1 * 500 = 50 # 异步 500 0.1 = 0.1 # 多进程写文件 # 首先往文件夹中写文件 # 向用户展示写入文件之后文件夹中所有的文件名
解析:他会在所有进程结束之后才能完成下面的print。
开启多个子进程的第二种方式:
import os from multiprocessing import Processclass MyProcess(Process): def __init__(self,arg1,arg2): super().__init__()self.arg1 = arg1 self.arg2 = arg2 def run(self): print(self.pid)print(self.name)print(self.arg1)print(self.arg2)if __name__ == '__main__': p1 = MyProcess(1,2)p1.start()p2 = MyProcess(3,4)p2.start()# 自定义类 继承Process类 # 必须实现一个run方法,run方法中是在子进程中执行的代码
这种方式需要第一定义一个类,让他继承process,第二种是传参,需要初始化,然后是定义一个run方法,因为定义run方法之后才能执行start,然后在实例化二个对象。分别执行。
打印结果:
6356
MyProcess-1
1
2
3136
MyProcess-2
3
4
因为此进程是异步,所以process1和process2不确定谁最先打印,随机。super是执行process所有方法。
转载于:https://my.oschina.net/u/3657436/blog/1785129
多进程,守护进程,锁相关推荐
- Python并发编程:多进程-守护进程
一 守护进程 主进程创建子进程,然后将该进程设置成守护自己的进程,守护进程就好比皇帝身边的老太监,皇帝已死老太监就跟着殉葬了. 关于守护进程需要强调两点: 其一:守护进程会在主进程代码执行结束后就终止 ...
- Python多进程与进程锁的基本使用
Python的multiprocessing模块提供了多种进程间通信的方式,如Queue.Pipe等. Queue是multiprocessing提供的一个模块,它的数据结构就是"FIFO- ...
- 《UNIX环境高级编程》笔记 第十三章-守护进程
1. 概念 守护进程(daemon)是生存期长的一种进程.它们常常在系统引导装入时启动,仅在系统关闭时才终止.因为它们没有控制终端,所以说它们是在后台运行的. Linux的大多数服务就是用守护进程实现 ...
- Python 多进程笔记 — 启动进程的方式、守护进程、进程间通信、进程池、进程池之间通信、多进程生产消费模型
1 面向过程启动多进程 Python 操作进程的类都定义在 multiprocessing 模块,该模块提供了一个 Process 类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另 ...
- python互斥锁原理_python并发编程之多进程1------互斥锁与进程间的通信
一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...
- python并发编程之semaphore(信号量)_python 之 并发编程(守护进程、互斥锁、IPC通信机制)...
9.5 守护进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就立即终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic process ...
- python 进程间同步_python之路29 -- 多进程与进程同步(进程锁、信号量、事件)与进程间的通讯(队列和管道、生产者与消费者模型)与进程池...
所谓异步是不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了.至于被依赖的任务最终是否真正完成,依赖它的任务无法确定,所以它是不可靠 ...
- python守护进程去中断子进程_04 Python并发编程(守护进程,进程锁,进程队列)
进程的其他方法 P = Process(target=f,) P.Pid 查看进程号 查看进程的名字p.name P.is_alive() 返回一个true或者False P.terminate( ...
- python并发编程之进程1(守护进程,进程锁,进程队列)
进程的其他方法 P = Process(target=f,) P.Pid 查看进程号 查看进程的名字p.name P.is_alive() 返回一个true或者False P.terminate( ...
- 并发 --- 31 进程锁 守护进程 进程队列
一.进程的其他方法 1. .name 进程名 (可指定) 2. .pid 进程号 3. os.getpid 在什么位置就是什么的进程号 4. .is ...
最新文章
- 【数据竞赛】“达观杯”文本智能处理挑战赛4
- Qt for Python Mac下使用 fbs 打包软件
- 阿里云yum源安装SVN失败的问题
- 解析Infopath生成的XSN结构
- matlab中批量tiff转png,图片(jpg,png,tif等)批量转dicom(dcm)格式
- 机器人煮面机创始人_那个火爆的煮面机器人搬走了!一大波机器人“入侵”,无人餐厅只是玩噱头?...
- python mysql捕获异常_python mysql无法捕获异常
- android wifi列表轮询,(八十八)Android O WiFi启动流程梳理续——connectToSupplicant
- redis之数据操作详解
- macOS safari安装第三方插件
- 小米商城前端页面(静态)
- 【零基础-1】PaddlePaddle学习Bert
- 方正证券:新一代认证核心系统换代升级,坚持实践金融科技全栈自主可控
- idea鼠标放大字体设置
- Windows系统被faust勒索病毒攻击勒索病毒解密服务器与数据库解密恢复
- python使用turtle库绘制一个100长度的十字架_使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例...
- 【笔记】概统论与数理统计第七章知识点总结
- Linux(ubuntu) 基础
- 任意长度的python列表_任意长度的Python列表、元组和字符串中最后一个元素的索引为...
- 视频教程-【无废话课程】Maya软件初级教学UV拆分基础入门【字幕版】-Maya
热门文章
- 【译】使用 CocoaPods 模块化iOS应用
- 今天中国获得金牌数量是7块,位居奖牌榜首位
- position:absolute的小坑
- python split()函数
- Win8 开发者训练营第一天的过程,感受和收获 :D
- 组件注册@ComponentScan的自动扫描和指定扫描规则
- 9.Springcloud的Hystrix服务熔断和服务降级
- mysql增删改查不区分大小写吗_MySQL的增删改查语句以及数据库设计的三大范式...
- cad插入块_CAD中的quot;块quot;能否修改?能!一个命令可快速解决
- ggplot2 | 图例(Ⅰ):图例函数、主题函数中的图例参数