进程(Process)是资源分配的最小单位,也是线程的容器。
进程以及状态
概念
进程(Process)是资源分配的最小单位,也是线程的容器。
程序:也就是一个静态的软件。
进程:一个程序运行起来后,代码+用到的资源称为进程,是操作系统中分配资源的基本单元。
程序是固定不变的,而进程会根据运行需要,让操作系统分配资源的。
进程的状态
任务数往往大于CPU核数,所以肯定会有一些任务在执行,另一部分在等待执行,所以有了不同的状态。
- 就绪态:运行条件都已经满足,正在等待CPU执行。
- 执行态:CPU正在执行其功能
- 等待态:等待某些条件满足。
进程的创建
multiprocessing
模块是跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情。
创建子进程
步骤:
- 导入模块
- 通过模块提供的Process类创建进程
- 启动进程
案例:
import multiprocessing
import time
def work1():
for i in range(10):
print('正在完成work1.......')
time.sleep(0.5)
if __name__ == '__main__':
# 1. 导入模块
# 2.通过模块提供的Process类创建进程
process_work1 = multiprocessing.Process(target=work1)
# 3.启动进程
process_work1.start()
Process语法结构:
Process([group[,target[,name[,args[,kwargs]]]]])
- target:传递函数的引用,这个子进程就执行这个函数的代码
- args:给target指定的函数以元组的形式传参数
- kwargs:给target指定的函数以字典的形式传参数
- name:给进程设定名称
- group:指定进程组
Process创建的实例对象的常用方法:
- start():启动子进程
- is_alive:判断子进程是否存活
- join():是否等待子进程执行结束,或者等待多长时间
- terminate():不管任务是否完成,立即终止子进程
Process创建的实例对象的常用属性:
- name:当前进程的别名
- pid:当前进程的pid(进程号)
进程信息
-
获取进程名称:
1. multiprocessing.current_process() 2. 创建子进程后 子进程.name
-
获取进程编号:
1. multiprocessing.current_process().pid 2. 子进程.pid 3. 利用os模块os.getpid()
-
获取进程父id
os.getppid()
案例:
import multiprocessing
import os
import time
'''
1. 导入模块
2. 通过模块提供的Process类创建进程
3. 启动进程
'''
def work1():
for i in range(10):
# 获取进程信息
print('子进程信息:', multiprocessing.current_process())
# 获取进程编号
print('进程id:', multiprocessing.current_process().pid)
# 使用os模块
print('进程id:', os.getpid())
# 获取进程父id
print('进程父id:', os.getppid())
print('正在完成work1.......')
time.sleep(2)
if __name__ == '__main__':
# 主进程信息
print('主进程信息:', multiprocessing.current_process())
# 1. 导入模块
# 2.通过模块提供的Process类创建进程
process_work1 = multiprocessing.Process(target=work1)
# 3.启动进程
process_work1.start()
# 获取process的信息
print('process_work1的全部信息:', process_work1)
print</