进程池实现
必要性
- 进程的创建和销毁过程消耗的资源比较多
- 当任务量众多,每个任务在很短时间内完成时,需要平方的创建和销毁进程,此时对计算机压力比较大
- 进程池技术很好的解决了以上问题
原理
创建一定数量的进程来处理事件,事件处理完进程不退出而是继续处理其他事件,直到所有事件全都处理完毕统一销毁.增加进程的重复利用,降低资源消耗
进程池实现
- 创建进程池对象,放入适当的进程
from multiprocessing import Pool
Pool(processes)
功能: 创建进程池对象
参数: 指定进程数量,默认根据系统自动判断
- 将事件加入进程池队列执行
pool.apply_async(func,args,kwds)
功能: 使用进程池执行 func 事件
参数: func 事件函数
args 援助 给func按位置传参
kwds 字典 给func按照键值传参
返回值: 返回函数事件对象
-
关闭进程池
pool.close() 功能: 关闭进程池
-
回收进程池中进程
功能: 回收进程池中进程
-
图解
简单的代码例子
"""
进程池使用实例
"""
from multiprocessing import Pool
from time import sleep, ctime
# 进程池事件
def worker(msg):
sleep(2)
print(ctime(), '--', msg)
if __name__ == '__main__':
# 创建进程池
pool = Pool()
# 向进程池队列添加事件
for i in range(10):
msg = ' Tedu %d ' % i
pool.apply_async(func=worker, args=(msg,))
# 关闭进程池
pool.close()
pool.join()
控制台输出
Wed Dec 15 13:50:20 2021 -- Tedu 0
Wed Dec 15 13:50:20 2021 -- Tedu 1
Wed Dec 15 13:50:20 2021 -- Tedu 2
Wed Dec 15 13:50:20 2021 -- Tedu 3
Wed Dec 15 13:50:20 2021 -- Tedu 4
Wed Dec 15 13:50:20 2021 -- Tedu 5
Wed Dec 15 13:50:20 2021 -- Tedu 6
Wed Dec 15 13:50:20 2021 -- Tedu 7
Wed Dec 15 13:50:21 2021 -- Tedu 8
Wed Dec 15 13:50:21 2021 -- Tedu 9