#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的方法。



'''





python3 创建多进程池 python多进程join()_多进程






#coding=utf-8



'''



还是来看看代码吧。



import random





def r():


if __name__=="__main__":


  p1.run=r 



   



  p2.run=r 



        从代码的执行结果可以看到的就是,如果不指定target的话,默认就会执行run方法,如果指定了target



        就按照正常的去执行。执行我们的start方法



   



 



   

python3 创建多进程池 python多进程join()_python3 创建多进程池_02







#coding=utf-8



'''



还有一个方法,就是join方法,在上面的代码里面,在调用process方法的时候,两次调用了join方法,



这个join方法,到底是什么作用了,官方文档给出的意思就是:阻塞当前的进程,直到调用join方法的那个进程执行完毕



在继续执行当前的进程。比如刚下的代码,知识吧join方法注释掉了。


import time



import random







def r1(process_name):



def r2(process_name):


if __name__=="__main__":




python3 创建多进程池 python多进程join()_子进程_03








#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了......



   



   



  '''





python3 创建多进程池 python多进程join()_多进程_04






#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这一句了,



    当然,就会变成图示的效果了,


python3 创建多进程池 python多进程join()_多进程_05