进程
程序:例如xxx.py这是程序,是一个静态的
进程:一个程序运行起来后,代码+用到的资源 称之为进程,它是操作系统分配资源的基本单元。
————目录————:
- 进程的状态
- 多进程的基本使用
- 进程名称及pid获取
- 参数传递
- 全局变量
- 守护进程
进程的状态
就绪态:运行的条件都已经满足,正在等在cpu执行
执行态:cpu正在执行其功能
等待态:等待某些条件满足,例如一个程序sleep了,此时就处于等待态
多进程的基本使用
1.创建:
import multiprocessing
对象 = multiprocessing.Process(group, target , name , args , kwargs)
2.参数:
参数 | 描述 |
---|---|
target | 如果传递了函数的引用,这个子进程就执行这里(函数)的代码 |
args | 给target指定的函数传递的参数,以元组的方式传递 |
kwargs | 给target指定的函数传递命名参数 |
name | 给进程设定一个名字,可以不设定 |
group | 指定进程组,大多数情况下用不到 |
3.方法:
方法 | 描述 |
---|---|
start() | 启动子进程实例(创建子进程) |
is_alive() | 判断进程子进程是否还在活着 |
join([timeout]) | 是否等待子进程执行结束,或等待多少秒 |
terminate() | 不管任务是否完成,立即终止子进程 |
4.属性:
参数 | 描述 |
---|---|
name | 当前进程的别名,默认为Process-N,N为从1开始递增的整数 |
pid | 当前进程的pid(进程号) |
进程名称及pid获取
1.进程名:
multiprocessing.current_process()
2.进程pid:
(1)multiprocessing.current_process().pid
(2)import os模块的os.getpid()
(3)获取父id:os.getppid()
参数传递
与多线程theading一致
1.元祖传参:args = (参数1,参数2,…)
注意:如果只有一个参数,应写为args=(参数,),逗号不可省略,证明他是一个元组
2.字典传参:kwargs = {“a”: 10, “b”:100,….}
3.混合使用:args = (参数1,), kwargs = {“b”:100,…….}
全局变量
进程之间不可共享全局变量
例:
import multiprocessing
import time
n = 0
def add():
global n
n += 1
print(n)
if __name__ == '__main__':
m1 = multiprocessing.Process(target=add)
m2 = multiprocessing.Process(target=add)
m1.start()
time.sleep(0.5)
m2.start()
time.sleep(0.5)
print(n)
执行结果:两次进程的操作结果都是1,而且最后n的值为0,说明主进程之间不共享全局变量(但是可通过消息队列Queue等进行数据的通信)
守护进程
设置后主进程结束时子进程也结束
# 第一种方法:主进程结束,子进程也结束
p1.daemon = True
# 第二种方法:让主进程立即结束
p1.terminate()