进程池
- 方便创建,管理进程,单独进程的Process创建,需要手动开启,维护任务函数,以及释放回收
- 进程池不需要这么麻烦,进程提前创建好,未来在使用的时候,可以直接给与任务函数
- 某个进程池中的任务结束了,占用的进程会自己释放刚才工作的事情,以便接收下一个
Process(target=,args=,).start() join()
P = Pool(num) #创建一个包含有num个空闲进程的池子
p.apply() 填充任务,任务如果结束,会自动释放掉当前占用的进程
创建大规模任务,Pool(100)
from mutliprocessing import Pool
-
创建进程池:进程池中的进程是可以复用
-
p = Pool(num)
- num:指明当前多少空闲进程创建出来
-
p.apply(func,args,)
-
Process(target,args),Lock()
- 阻塞行为
- func:指明填充功能函数名
- args:对应的参数
-
p.apply_async(func,args,)
- 非阻塞行为,
-
**p.close() **
- 在整个业务结束之后,进程池要首先关闭
- 没有办法填充新的任务
-
p.join()
- 进程回收,把关闭了的进程池中的每个进程join() 释放回收掉
-
p.terminate()
- 直接关闭进程池,并且终止所欲偶进程
-
-
进程池的工作的返回值:
- res = p.apply(func,)
- res就是进程池的工作结果
- 立竿见影就可以看到结果,就因为apply填充任务是阻塞行为
- res = p.apply_aysnc(func)
- 非阻塞的结果,可以立即拿到,但是不是结果,只是一个抽象虚拟的值
- 这个值代表进程结束后的返回值
- res.get()
- 当前非阻塞执行的进程,有优先级先结束
- 强制要求立即这个结果,但是会影响进程之间的并发效果
- 非阻塞的结果,可以立即拿到,但是不是结果,只是一个抽象虚拟的值
- res = p.apply(func,)
-
Pipe() 进程池通信没有管道
-
Queue()
-
进程池中的通信队列是特殊的
-
from multiprocessing import Manager
array:共享内存,char short int long long unsizned
-