并发编程之多进程

一. 进程理论

二. 开启进程的两个方法

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方法

在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况

情况一:在主进程的任务与子进程的任务彼此独立的情况下,主进程的任务先执行完毕后,主进程还需要等待子进程执行完毕,然后统一回收资源

情况二:如果主进程的任务在执行到某一个阶段时,需要等待子进程执行完毕后才能继续执行,就需要有一种机制能够让主进程检测子进程是否运行完毕,在子进程执行完毕后才继续执行,否则一直在原地阻塞,这就是join方法的作用

2.Process对象的其他属性或方法

进程对象的其他方法,p.terminate与is_alive

进程对象的其他属性,p.name与p.pid

3.练习题

四、

转载于:https://www.cnblogs.com/sjingx/p/8988236.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值