Python并发编程—进程池
进程池实现
1.必要性
【1】 进程的创建和销毁过程消耗的资源较多
【2】 当任务量众多,每个任务在很短时间内完成时,需要频繁的创建和销毁进程。此时对计算机压力较大
【3】 进程池技术很好的解决了以上问题。
2.原理
创建一定数量的进程来处理事件,事件处理完进 程不退出而是继续处理其他事件,直到所有事件全都处理完毕统一销毁。增加进程的重复利用,降低资源消耗。
3.进程池实现
【1】 创建进程池对象,放入适当的进程
from multiprocessing import Pool
Pool(processes)
- 功能: 创建进程池对象
- 参数: 指定进程数量,默认根据系统自动判定
【2】 将事件加入进程池队列执行
pool.apply_async(func,args,kwds)
- 功能: 使用进程池执行 func事件
- 参数: func 事件函数
- args 元组 给func按位置传参
- kwds 字典 给func按照键值传参
- 返回值: 返回函数事件对象
【3】 关闭进程池
pool.close()
- 功能: 关闭进程池
【4】 回收进程池中进程
pool.join()
功能: 回收进程池中进程
1 from multiprocessing import Pool 2 from time import sleep,ctime 3 4 # 进程池事件 5 def worker(msg): 6 sleep(2) 7 print(msg) 8 return ctime() 9 10 # 创建进程池 11 pool = Pool(4) 12 13 # 向进程池添加执行事件 14 for i in range(10): 15 msg = "Hello %d"%i 16 17 # r 代表func事件的一个对象 18 r = pool.apply_async(func=worker,args=(msg,)) 19 20 # 关闭进程池 21 pool.close() 22 23 # 回收进程池 24 pool.join() 25 26 print(r.get()) # 可以获取事件函数的返回值