进程
进程&线程
PID进程标识
操作系统为管理多个进程,为每个进程编号
- os.getpid()——获取当前进程号
- os.getppid()——获取当前进程的父进程pid
创建进程
import multiprocessing
进程名 = multiprocessing.Process(参数1,参数2,参数3)
参数1: target = 函数名,标识进程运行的函数
参数2: args (元组接收位置参数)
参数3: kwargs (字典接收关键字参数)
进程相关函数
- 启动进程
进程名.start()
- 阻塞等待子进程执行完成
进程名.join(参数1)
参数1:表示阻塞等待的秒数
- 判断进程状态
进程名.is_alive()
返回值 :True/False
- 终止子进程
进程名.terminate()
此时会有延迟,因为是操作系统终止该进程
孤儿进程&僵死进程
- 孤儿进程:子进程还在运行,父进程已经退出,父进程会被转移为init
- 僵死进程:子进程已经退出,父进程没有回收子进程的资源
多进程的执行是无序的
多进程不能共享全局变量
- 进程间是独立的数据空间
- 进程是操作系统进行资源分配的基本单位
进程的三种状态
进程池
1.进程池的分类
- 工作进程——执行用户任务
- 控制进程——接收任务、分配任务、维护工作进程
2.创建进程池
from multiprocessing import Pool
pool = Pool(最大进程数)
3.创建进程池间通信
import multiprocessing
queue = multiprocessing.Manager().Queue()
4.两种添加任务的方式
pool.apply()——添加任务到进程池,阻塞等待任务执行完成
pool.apply_async()——添加任务到进程池,不等待任务完成直接向下执行
5.阻塞等待任务完成
pool.join()
6.关闭进程池,不再接收新任务
pool.close()
7.终止进程池
pool.terminate()