多任务编程 -- multiprocessing 模块(创建多进程)
进程创建方法:
- 流程特点:
- 将需要子进程执行的事件封装为函数;
- 通过模块的Process类,创建进程对象,关联函数;
- 可以通过进程对象,设置进程信息及属性;
- 通过进程对象,调用start启动进程;
- 通过进程对象,调用join回收进程。
- 基本接口使用:
- Process():
- 功能:创建进程对象
- 参数:
- target:绑定要执行的目标函数;
- args:元祖,用于给target函数,位置传参;
- kwargs:字典,用于给target函数,键值传参。
- p.start():
- 功能:启动进程
- 注意:启动进程,此时target绑定的函数开始执行,该函数作为子进程执行内容,此时进程真正被创建。
- p.join([timeout]):
- 功能:阻塞等待回收进程
- 参数:超时时间
- Process():
- 注意:
- 使用multiprocessing创建进程,同样是,子进程复制父进程内存空间代码段,父子进程运行互不影响;
- 子进程只运行target绑定的函数部分,其余内容,均是父进程执行内容;
- 父进程往往只用来创建子进程、回收子进程,具体事件有子进程完成;
- multiprocessing创建的子进程中,无法使用标准输入(即:input)。
- 进程对象属性:
- p.name:进程名称;
- p.pid:对应子进程的PID号;
- p.is_alive():查看子进程是否在生命周期;
- p.daemon:设置父子进程的退出关系:
- True:子进程会随父进程的退出而结束;
- 要求:必须在start()前设置;
- 如果daemon被设置为True,通常就不会使用join()
实例代码:
Python3多进程 multiprocessing 模块实例详解_python_脚本之家
进程池实现:
- 必要性:
- 进程的创建和销毁过程,消耗的资源较多;
- 当任务量众多,每个任务在很短时间内完成时,需要频繁的创建和销毁进程。此时,对计算机压力较大。
- 进程池技术很好的解决了以上问题。
- 原理:
- 图解:
- 创建进程池对象,放入适当的进程:
-
from multiprocessing import Pool Pool(processes)
- 功能:创建进程池对象
- 参数:指定进程数量,默认根据系统自动判定(计算机的核数)
-
- 将事件加入进程池队列,执行:
-
from multiprocessing import Pool pool = Pool(3) pool.apply_async(func, args, kwds)
- 功能:使用进程池执行 func事件
- 参数:
- func:事件函数
- args:元祖,给func按位置传参
- kwds:字典,给func按键值传参
-
- 关闭进程池:
- pool.close():
- 功能:关闭进程池
- 回收进程池中进程:
- pool.join():
- 功能:回收进程池中进程。
- 图解: