#coding=utf-8
 
 
'''
 
 
python的多进程的理解。熟悉如何创建一个进程。
 
 
以及join,start方法的使用。
 
 
来说说我们今天的主角,就是multiprocess模块的使用。该模块在windows上面能够模拟出fork的效果
 
 
可以实现跨平台,因此都是用multiprocessing
 
 
下面还是来直接看看代码吧。
import random
 
 
 
 
def r1(process_name):
 
def r2(process_name):
 
if __name__=="__main__":
 
 
 
上面的方法提到了两个重要的方法,就是join方法和我们的run方法。
 
 
在创建process对象的时候,不指定target,那么就会默认执行proces的方法。
 
 
'''
 
 
 
 
 
 
 
 
#coding=utf-8
 
  
'''
 
  
还是来看看代码吧。
 
  
import random
 
  
 
  
def r():
  
if __name__=="__main__":
  
p1.run=r
 
  
 
  
p2.run=r
 
  
从代码的执行结果可以看到的就是,如果不指定target的话,默认就会执行run方法,如果指定了target
 
  
就按照正常的去执行。执行我们的start方法
 
  
 
  
 
  
 
  
 
  
 
  
#coding=utf-8
 
  
'''
 
  
还有一个方法,就是join方法,在上面的代码里面,在调用process方法的时候,两次调用了join方法,
 
  
这个join方法,到底是什么作用了,官方文档给出的意思就是:阻塞当前的进程,直到调用join方法的那个进程执行完毕
 
  
在继续执行当前的进程。比如刚下的代码,知识吧join方法注释掉了。
 
import time
 
  
import random
 
  
 
  
 
  
def r1(process_name):
 
  
def r2(process_name):
 
if __name__=="__main__":
 
 
  
 
  
 
  
 
  
#coding=utf-8
 
   
'''
 
   
为了深刻理解这次把P2执行函数的睡眠时间调大一点,让她多睡一会儿,让其保留P1的join。注释掉P2的join
 
   
import time
 
   
import random
 
   
 
   
 
   
def r1(process_name):
print(os.getpid())
 
def r2(process_name):
 
if __name__=="__main__":
 
 
   
 
   
 
   
从程序的结果可以很明显的看出,当p1进程调用了join方法之后,主进程会等待P1执行完毕之后,才会
 
   
就会向下执行,而不是等待P2执行完毕。
 
   
 
   
 
   
既然这样,为何先要调用start方法,然不是start完成之后,就去调用join了......
 
   
 
   
 
   
'''
 
  
 
  
 
  
 
  
#coding=utf-8
 
   
'''
 
   
 
   
import time
 
   
import random
 
   
def r1(process_name):
   
print(os.getpid())
 
def r2(process_name):
if __name__=="__main__":
   
从程序的结果可以很明显的看出,当p1进程调用了join方法之后,主进程会等待P1执行完毕之后,才会
 
   
就会向下执行,而不是等待P2执行完毕。
 
   
既然这样,为何先要调用start方法,然不是start完成之后,就去调用join了......
 
   
join方法是用来阻塞当前线程的,P1.start之后,P1就提示主线程,需要等待P1执行
 
   
结束完成之后才会向下执行,那么,主线程就只能等待呗,这样就没有执行P2.start这一句了,
 
   
当然,就会变成图示的效果了,
 
 
 
 
                    




 
            
        













 
                    

 
                 
                    