python3 学习笔记 关于多进程 multiprocessing模块 方法介绍

多进程multiprocessing 模块常用方法有:
import multiprocessing as MP 以下几个例子都是在Windows系统下运行的。
1 Process 类-------创建进程对象
Process类 用来描述一个进程对象。这个类跟 ‘ threading.Thread’功能类似,它初始化主要有五个参数,三个参数是默认的,大多数时候只需要传两个参数。
p = MP.Process(group=None,target=None,name=None,*args,*kwargs,daemon=None)
功能: 创建进程函数
参数说明:group :进程通道分组
target :绑定函数名字,如:target=fn 就是把fn函数传入创建一个子进程
args,
kwargs:就是fn 函数需要传入的参数,单个参数用元组形式或者关键字形
传入
name : 给创建的进程起名
daemon : 默认False,就是主进程退出不会影响子进程退出;
创建进程了并不代表进程在运行,需要启动才能运行
p.start() : 启动进程,会自动执行target后面所接的函数,此时进程才是真正被创建
p.join([timeout]): 阻塞等待回收子进程 ; 后接参数为超时时间,阻塞等待一定时间,超过时间
子进程自己退出,但很可能会成为僵尸进程,占内存。p.join() 有时会阻塞出错
有些场景,设置daemon 参数可以很好避免出错
创建进程对象的初始化 的几个参数 都可以通过方法来获得,如下:

python3 学习笔记 关于多进程 multiprocessing模块 方法介绍
运行结果如下:
process name is : worker
process PID: 15140
process is alive: True
I’m Daivl
I’m working…
I’m Daivl
I’m working…
I’m Daivl
I’m working…

2 Pool 类----- 创建进程池
Pool(processes=None, initializer=None, initargs=(), maxtasksperchild=None)
功能:返回进程池对象
参数: processes : 后接整型,表示进程池中有多少进程

  补充:  Pool 可以提供指定数量的进程供用户使用,默认是 CPU 核数。当有新的请求提交到 Poll 的
                 时候,如果池子没有满,会创建一个进程来执行,否则就会让该请求等待。 
	- Pool 对象调用 join 方法会等待所有的子进程执行完毕 
	- 调用 join 方法之前,必须调用 close 
	- 调用 close 之后就不能继续添加新的 Process 了
 关于Pool 的几个常用方法介绍:
 	Pool.apply_async(func,args,kwds) ----返回值 : 返回一个代表进程池事件的对象,通过		
 	                                                                 get()方法可以取出func事件函数的返回值
	功能 : 将事件放入到进程池队列
	参数 : func 事件函数
  			  args 以元组形式给func传参
		kwds 以字典形式给func传参
Pool.apply(func,args,kwds)     -------功能与上面方法相同,参数含义也相同,区别在于
							该方法只能允许一个进程进入池子,在一个进程
							结束之后,另外一个进程才可以进入;另外
							它没有返回值
Pool.map(func,iter)    ------------ 返回事件函数的返回值列表
	功能: 将要做的事件放入进程池
	参数: func  要执行的函数
   			   iter  迭代对象

multiprocessing 模块还有几个比较重要的方法就是应用于进程间通信,下一章再写