一. 进程理论
二. 开启进程的两个方法
1. multiprocessing模块介绍
multiprocessing模块是用来开启子进程,并在子进程中执行我们定制的任务(比如函数),功能:支持子进程通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、Lock
2. Process类的介绍
创建进程的类:
Process(group=None, target=None, name=None, args=(), kwargs={})
强调:
1. 需要使用关键的方式来指定参数
2. args指定的为传给target函数的位置
参数介绍:
group参数未使用,值始终为None
target表示调用对象,即子进程要执行的任务
args表示调用对象的位置参数元组,args=(1,2,'egon',)
kwargs表示调用对象的字典,kwargs={'name':'egon','age':18}
name为子进程的名称
方法介绍:
p.start():启动进程,并调用该子进程中的p.run()
p.run():进程启动时运行的方法,正是它去调用target指定的函数,我们定义类的类中一定要实现方法
p.terminate():强制终止进程p,不会进行任何清理操作,如果p创建了子进程,该子进程就成了僵尸进程,使用该方法需要特别小心这种情况。如果p还保存了一个锁那么也将不会被释放,进而导致死锁
p.is_alive():如果p仍然运行,返回True
p.join():主线程等待p终止(主线程处于等待状态,而p处于运行的状态)。timeout是可选的超时时间
属性介绍:
p.deamon:默认值为False,如果设为True,代表p为后台运行的守护进程,当p的父进程终止时,p也随之终止,并且设定为True后,p不能创建自己的新进程,必须在p.start()之前设置
p.name:进程的名称
p.pid:进程的pid
3.Process类的使用
注意:在windows中Process()必须放在#if __name__ == '__mian__':下
1 from multiprocessing import Process 2 from time import sleep 3 4 5 def read(name): 6 print('%s start read book' % name) 7 sleep(3) 8 print('%s stop read book' % name) 9 10 11 if __name__ == '__main__': 12 # 实例化三个对象 13 p1 = Process(target=read, args=('alex',)) 14 p2 = Process(target=read, args=('sjingx',)) 15 p3 = Process(target=read, args=('egon',)) 16 17 # 调用对象下的方法,开启三个进程 18 p1.start() 19 p2.start() 20 p3.start() 21 22 print('主')
1 from multiprocessing import Process 2 from time import sleep 3 4 5 class MyProcess(Process): 6 def __init__(self, name): 7 super().__init__() 8 self.name = name 9 10 def run(self): 11 print('%s start read book' % self.name) 12 sleep(3) 13 print('%s stop read book' % self.name) 14 15 16 if __name__ == '__main__': 17 # 实例化得到三个对象 18 p1 = MyProcess('sjingx') 19 p2 = MyProcess('alex') 20 p3 = MyProcess('egon') 21 22 p1.start() # start会自动调用run 23 p2.start() 24 p3.start() 25 print('主')
三. join方法
1.Process对象的join方法
在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况
情况一:
情况二:
2.Process对象的其他属性或方法
进程对象的其他方法,p.terminate与is_alive
进程对象的其他属性,p.name与p.pid
3.练习题
四、