并发编程之多进程

时间:2021-02-04 16:42:43

一. 进程理论

二. 开启进程的两个方法

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.练习题

四、